当前位置:   article > 正文

二叉树(创建)_二叉树的创建

二叉树的创建

一、先序思想创建:

第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树,直到递归创建到的节点下不继续创建左子树,也就是当下递归到的节点下的左子树指向NULL,结束本次左子树递归,返回这个节点的上一个节点,开始创建右子树,然后又开始以当下这个节点,继续递归创建左子树,左子树递归创建完,就递归创建右子树,直到递归结束返回到上一级指针节点(也就是根节点下),此时根节点左边子树创建完毕,开始创建右边子树,原理和根节点左边创建左右子树相同

二、创建二叉树:

二叉树的操作通常使用递归方法,如果递归不太明白,建议去对此进行一下学习和练习。二叉树的操作可以分为两类,一类是需要改变二叉树的结构的,比如二叉树的创建、节点删除等等,这类操作,传入的二叉树的节点参数为二叉树指针的地址,这种参入传入,便于更改二叉树结构体的指针(即地址)

二叉树结构体初始化

  1. typedef struct Tree{
  2. int data; // 存放数据域
  3. struct Tree *lchild; // 遍历左子树指针
  4. struct Tree *rchild; // 遍历右子树指针
  5. }Tree,*BitTree;

传一级参数方法

  1. BitTree CreateLink()
  2. {
  3. int data;
  4. int temp;
  5. BitTree T;
  6. scanf("%d",&data); // 输入数据
  7. temp=getchar(); // 吸收空格
  8. if(data == -1){ // 输入-1 代表此节点下子树不存数据,也就是不继续递归创建
  9. return NULL;
  10. }else{
  11. T = (BitTree)malloc(sizeof(Tree)); // 分配内存空间
  12. T->data = data; // 把当前输入的数据存入当前节点指针的数据域中
  13. printf("请输入%d的左子树: ",data);
  14. T->lchild = CreateLink(); // 开始递归创建左子树
  15. printf("请输入%d的右子树: ",data);
  16. T->rchild = CreateLink(); // 开始到上一级节点的右边递归创建左右子树
  17. return T; // 返回根节点
  18. }
  19. }

传二级参数方法

  1. BitTree CreateLink(BitTree *T) // 次数 T为指向根节点的指针的地址
  2. {
  3. int data;
  4. scanf("%d",&data);
  5. if(data == -1){
  6. *T=NULL; // 结束递归时,让指针当前节点的指针地址的 指针 指向NULL
  7. }else{
  8. *T = (BitTree)malloc(sizeof(Tree)); // 对指向节点指针地址的指针 分配内存
  9. if(!(*T) ){ // *T = NULL 表示分配内存失败,也就是结束递归创建了
  10. printf("内存分配失败\n");
  11. exit(-1);
  12. }
  13. (*T)->data = data; // 给节点指针地址内的数据域,存入数据
  14. printf("请输入%d的左子树: ",data);
  15. CreateLink(&(*T)->lchild); // 开始遍历左子树
  16. printf("请输入%d的右子树: ",data);
  17. CreateLink(&(*T)->rchild); // 开始遍历右子树,遍历的思想文章开头处解释
  18. }
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/233263
推荐阅读
相关标签
  

闽ICP备14008679号