1、/先序输入二叉树结点的值,空格表示空树void createBiTree(BiTree &T) char ch; /输入结点时用 scanf(%c,&ch); if(ch= ) /若输入空格,该值为空,且没有左右孩子 T=NULL; else T=(BiTNode *)malloc(sizeof(BiTNode); /分配结点空间 if(!T) /分配失败 exit(OVERFLOW); T-data=ch; /生成根结点 createBiTree(T-lchild); /构造左子树rchild); /构造右子树 /递归方法先序遍历二叉树void preOrderTraverse(BiTree
2、 T) if(T) /若非空 if(T-data) /输出 printf(,T-data); preOrderTraverse(T-/递归方法中序遍历二叉树void inOrderTraverse(BiTree T)/递归方法后序遍历二叉树void postOrderTraverse(BiTree T)/层序遍历二叉树void LevelTraverse(BiTree T) queue q;/建队 q.push(T);/根节点入队 BiTree p; while(!q.empty() p=q.front(); /获得队列的首元素 q.pop(); /首元素出队 coutdatalchild!=
3、NULL) /若结点的左孩子不空 q.push(p-rchild!=NULL)/若结点的右孩子不空/非递归方法前序遍历二叉树void stackPreOrderTraverse(BiTree T) stack s.push(p- /左孩子入栈,直到走到尽头 s.pop(); /空指针出栈 p=s.top();/获得栈顶元素 s.pop(); /出栈 /右孩子入栈/非递归方法中序遍历二叉树void stackInOrderTraverse(BiTree T) /入栈/非递归方法后序遍历二叉树void stackPostOrderTraverse(BiTree T) /建栈 map m; /标记结
4、点是否已经输出 /栈首元素 if(T) /若不是空树 s.push(T); /根结点入栈 while(true) /目的:找到后序遍历要输出的结点 while(p=s.top()&lchild&!mp-lchild) /若左孩子未输出,将左孩子入栈,直到尽头,不包括空指针 s.push(p- if(p=s.top()&rchild&rchild) /若最左孩子的右孩子未输出且非空,则入栈 else break; /找到结点跳出循环 if(p=s.top()&mp) mp=true; /标记已经输出 /退栈/后序遍历求二叉树的高度递归算法int PostTreeDepth(BiTree T) i
5、nt hl,hr,max; if(T!=NULL) hl=PostTreeDepth(T- /求左子树的深度 hr=PostTreeDepth(T- /求右子树的深度 max=hlhr?hl:hr; /得到左、右子树深度较大者 return(max+1); /返回树的深度 else return(0); /如果是空树,则返回0/*按竖向树状打印的二叉树代码是为了实现二叉树的横向显示问题。 这种树形要求先打印右子树,再打印根,最后打印左子树,顺序恰为逆中序顺序。 这种输出格式,结点的左右位置与结点的层深有关, 故算法中设置了一个表示当前根节点层深的参数,以控制输出结点的左右位置。 */void
6、PrintTree(BiTree T,int nLayer) int i; if(T=NULL) return; PrintTree(T-rchild,nLayer+1); for(i=0;irchild) LeafNum+; cout return LeafNum;int main() BiTree T; /定义结点 int layer=0;/层数 while(true)输入二叉树结点值空格表示空树:endl; createBiTree(T);递归先序遍历: preOrderTraverse(T);递归中序遍历: inOrderTraverse(T);递归后序遍历: postOrderTraverse(T);层序遍历: LevelTraverse(T);非递归先序遍历: stackPreOrderTraverse(T);非递归中序遍历: stackInOrderTraverse(T);非递归后序遍历: stackPostOrderTraverse(T);叶子结点为:叶子结点个数为:TreeLeaf(T) 树的的深度: layer=PostTreeDepth(T);layer二叉树的树形结构图: PrintTree(T,layer); return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1