当前位置:   article > 正文

一:构造链式二叉树(—)_1.构建如下图二叉树,2.要求使用括号表示法输入二叉树并转化为二叉树的链式存储结

1.构建如下图二叉树,2.要求使用括号表示法输入二叉树并转化为二叉树的链式存储结

1:由二叉树的括号表示法构造链式二叉树

  1. //由二叉树的括号表示, 创建二叉树,并返回根节点的指针
  2. void CreateBTree( BTNode *&root, char str[])//参数:传入根节点的指针,二叉树的括号表示
  3. {
  4. //flag标记其后处理的节点; 若是父节点(此刻为栈顶元素)的左儿子(flag=1), 若是是右儿子(flag=2)
  5. int j=0, flag=0, top=-1;
  6. BTNode *p=NULL;
  7. while( str[j]!='\0')
  8. {
  9. switch( str[j] )
  10. {
  11. case '(':flag=1; top++; stack[top]=p; break;//若遇到左括号,则把前面刚刚创建的那个节点入栈, flag=1
  12. case ',':flag=2; break;//若遇到逗号,说明其后创建的节点为右孩子节点, flag=2
  13. case ')':top--; break;//若遇到右括号,说明栈顶结点的左右孩子处理完毕, 栈顶结点出栈
  14. default://遇到元素
  15. p=new Node;//创建新节点
  16. p->data=str[j]; p->left=p->right=NULL;//为新建节点赋值:且此时栈顶结点是p的父节点
  17. if( root==NULL ) //如果根节点为空
  18. {
  19. root=p;
  20. }
  21. else
  22. {
  23. switch( flag )
  24. {
  25. case 1:stack[top]->left=p;break;//flag=1说明p为栈顶元素左儿子
  26. case 2:stack[top]->right=p;break;//p为栈顶元素右儿子
  27. }
  28. }
  29. }
  30. j++;
  31. }
  32. }
2:由二叉树顺序存储构造链式二叉树
说明:顺序存储在char型的str[ ]字符串数组中;  节点不存在时,对应节点值为'#';

函数返回二叉树的根节点;

  1. BTNode *CreateBTree(char str[], int i)//参数:二叉树的顺序存储,该处理的节点标号 ;
  2. {
  3. BTNode *b;
  4. if(i> MAXsize)//MAXsize表示二叉树顺序存储时,数组的最大下标
  5. return NULL;
  6. if( str[i]=='#' ) return NULL;//当节点不存在时, 返回NULL
  7. b=new BTNode;//创建节点
  8. b->left=CreateBTree(str, 2*i);//递归创建左子树
  9. b->right=CreateBTree(str, 2*i+1);//递归创建右子树
  10. return b;//返回根节点
  11. }


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

闽ICP备14008679号