做网站如何导入信用卡付款,wordpress 页面模版,wordpress社交登陆插件,本标准在住房城乡建设部门户网站数据结构——二叉链表创建二叉树 一、思想#xff08;先序思想创建#xff09;#xff1a;二、创建二叉树 (1)传一级参数方法(2)传二级参数方法 一、思想#xff08;先序思想创建#xff09;#xff1a; 第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树先序思想创建二、创建二叉树 (1)传一级参数方法(2)传二级参数方法 一、思想先序思想创建 第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树直到递归创建到的节点下不继续创建左子树也就是当下递归到的节点下的左子树指向NULL结束本次左子树递归返回这个节点的上一个节点开始创建右子树然后又开始以当下这个节点继续递归创建左子树左子树递归创建完就递归创建右子树直到递归结束返回到上一级指针节点也就是根节点下此时根节点左边子树创建完毕开始创建右边子树原理和根节点左边创建左右子树相同 二、创建二叉树 二叉树的操作通常使用递归方法如果递归不太明白建议去对此进行一下学习和练习。二叉树的操作可以分为两类一类是需要改变二叉树的结构的比如二叉树的创建、节点删除等等这类操作传入的二叉树的节点参数为二叉树指针的地址这种参入传入便于更改二叉树结构体的指针即地址。这里稍微有一点点绕可能需要多思考一下 如下是二叉数创建的函数这里我规定节点值为整数如果输入的数为-1则表示结束继续往下创建子节点的操作。然后我们使用递归的方法以此创建左子树和右子树
二叉树结构体初始化 为了更方便的使用二叉树结构体可以使用 typedef 对结构体进行命名 typedef struct Tree{int data; // 存放数据域struct Tree *lchild; // 遍历左子树指针struct Tree *rchild; // 遍历右子树指针}Tree,*BitTree;这里展示两种传参类型的创建方法其中深意可多次参考理解加深指针理解 (1)传一级参数方法
BitTree CreateLink()
{int data;int temp;BitTree T;scanf(%d,data); // 输入数据tempgetchar(); // 吸收空格if(data -1){ // 输入-1 代表此节点下子树不存数据也就是不继续递归创建return NULL;}else{T (BitTree)malloc(sizeof(Tree)); // 分配内存空间T-data data; // 把当前输入的数据存入当前节点指针的数据域中printf(请输入%d的左子树: ,data); T-lchild CreateLink(); // 开始递归创建左子树printf(请输入%d的右子树: ,data); T-rchild CreateLink(); // 开始到上一级节点的右边递归创建左右子树return T; // 返回根节点} }(2)传二级参数方法
BitTree CreateLink(BitTree *T) // 次数 T为指向根节点的指针的地址
{int data; scanf(%d,data);if(data -1){*TNULL; // 结束递归时让指针当前节点的指针地址的 指针 指向NULL}else{*T (BitTree)malloc(sizeof(Tree)); // 对指向节点指针地址的指针 分配内存if(!(*T) ){ // *T NULL 表示分配内存失败也就是结束递归创建了printf(内存分配失败\n);exit(-1);}(*T)-data data; // 给节点指针地址内的数据域存入数据printf(请输入%d的左子树: ,data);CreateLink((*T)-lchild); // 开始遍历左子树printf(请输入%d的右子树: ,data);CreateLink((*T)-rchild); // 开始遍历右子树遍历的思想文章开头处解释}
}1一级参数完整例子
#includestdio.h
#includestdlib.htypedef struct Tree{int data; // 存放数据域struct Tree *lchild; // 遍历左子树指针struct Tree *rchild; // 遍历右子树指针}Tree,*BitTree;BitTree CreateLink()
{int data;int temp;BitTree T;scanf(%d,data); // 输入数据tempgetchar(); // 吸收空格if(data -1){ // 输入-1 代表此节点下子树不存数据也就是不继续递归创建return NULL;}else{T (BitTree)malloc(sizeof(Tree)); // 分配内存空间T-data data; // 把当前输入的数据存入当前节点指针的数据域中printf(请输入%d的左子树: ,data); T-lchild CreateLink(); // 开始递归创建左子树printf(请输入%d的右子树: ,data); T-rchild CreateLink(); // 开始到上一级节点的右边递归创建左右子树return T; // 返回根节点}
}void ShowXianXu(BitTree T) // 先序遍历二叉树
{if(TNULL){return;}printf(%d ,T-data);ShowXianXu(T-lchild); // 递归遍历左子树ShowXianXu(T-rchild); // 递归遍历右子树
}int main()
{BitTree S;printf(请输入第一个节点的数据:\n);S CreateLink(); // 接受创建二叉树完成的根节点ShowXianXu(S); // 先序遍历二叉树return 0;
} 2二级参数完整例子
#includestdio.h
#includestdlib.h
typedef struct Tree{int data;struct Tree *lchild;struct Tree *rchild;
}Tree,*BitTree;BitTree CreateLink(BitTree *T) // 次数 T为指向根节点的指针的地址
{int data; scanf(%d,data);if(data -1){*TNULL; // 结束递归时让指针当前节点的指针地址的 指针 指向NULL}else{*T (BitTree)malloc(sizeof(Tree)); // 对指向节点指针地址的指针 分配内存if(!(*T) ){ // *T NULL 表示分配内存失败也就是结束递归创建了printf(内存分配失败\n);exit(-1);}(*T)-data data; // 给节点指针地址内的数据域存入数据printf(请输入%d的左子树: ,data);CreateLink((*T)-lchild); // 开始遍历左子树printf(请输入%d的右子树: ,data);CreateLink((*T)-rchild); // 开始遍历右子树遍历的思想文章开头处解释} }void ShowXianXu(BitTree T) // 先序遍历二叉树
{if(TNULL){return;}printf(%d ,T-data);ShowXianXu(T-lchild); // 遍历左子树ShowXianXu(T-rchild); // 遍历右子树
}int main()
{BitTree *S; // 创建指向这个结构体指针地址 的指针printf(请输入第一个节点的数据:\n);CreateLink(S); // 传二级指针地址ShowXianXu(S); return 0;
}