二叉树的遍历与深度求法
Posted lcy-4
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的遍历与深度求法相关的知识,希望对你有一定的参考价值。
前几天学数据结构时做了一个实验是关于二叉树遍历的,下面代码我会分享几种遍历方式。
1 #include<iostream> 2 #include<stack> //头文件 3 #include<queue> //头文件 4 using namespace std; 5 typedef struct BiTNode //二叉树初始化 6 { 7 char data; 8 struct BiTNode *lchild,*rchild; 9 } BiTNode,*BiTree; 10 11 void CreatBiTree(BiTree &T) //先序创建二叉树 12 { 13 char ch; 14 cin>>ch; 15 if(ch==‘#‘) 16 T=NULL; 17 else 18 { 19 T=new BiTNode; 20 T->data=ch; 21 CreatBiTree(T->lchild); 22 CreatBiTree(T->rchild); 23 } 24 } 25 void PreOrderTraverse(BiTree T) //先序遍历 26 { 27 if(T) 28 { 29 cout<<T->data<<" "; 30 PreOrderTraverse(T->lchild); 31 PreOrderTraverse(T->rchild); 32 } 33 34 } 35 void InOrderTraverse(BiTree T) //中序遍历 36 { 37 if(T) 38 { 39 InOrderTraverse(T->lchild); 40 cout<<T->data<<" "; 41 InOrderTraverse(T->rchild); 42 } 43 44 } 45 void PostOrderTraverse(BiTree T) //后序遍历 46 { 47 if(T) 48 { 49 PostOrderTraverse(T->lchild); 50 PostOrderTraverse(T->rchild); 51 cout<<T->data<<" "; 52 } 53 54 } 55 56 void InOrderTraverse1(BiTree T) //中序遍历的非递归方法 57 { 58 stack<BiTNode*> S; 59 BiTNode *p=new BiTNode; 60 p=T; 61 BiTNode* q=new BiTNode; 62 while(p||!S.empty()) 63 { 64 if(p) 65 { 66 S.push(p); 67 p=p->lchild; 68 } 69 else 70 { 71 q=S.top(); 72 S.pop(); 73 cout<<q->data<<" "; 74 p=q->rchild; 75 } 76 } 77 } 78 79 void LevelOrderTraverse(BiTree T) //层序遍历 80 { 81 queue<BiTNode*> Q; 82 BiTNode* p=new BiTNode; 83 if(T==NULL) 84 return; 85 Q.push(T); 86 while(!Q.empty()) 87 { 88 p=Q.front(); 89 Q.pop(); 90 if(p->lchild) 91 Q.push(p->lchild); 92 if(p->rchild) 93 Q.push(p->rchild); 94 cout<<p->data<<" "; 95 } 96 } 97 int BiTreeDepth(BiTree T) //深度 98 { 99 if(T==NULL) 100 return 0; 101 else 102 { 103 int m=BiTreeDepth(T->lchild); 104 int n=BiTreeDepth(T->rchild); 105 if(m>n) 106 return (m+1); 107 else 108 return (n+1); 109 } 110 } 111 int NodeCount(BiTree T) ///叶子结点个数 112 { 113 if(T==NULL) 114 return 0; 115 else 116 return NodeCount(T->lchild)+NodeCount(T->rchild)+1; 117 }
以上是二叉树的几个常见的函数,希望对大家的学习有帮助,别忘记点波关注。
以上是关于二叉树的遍历与深度求法的主要内容,如果未能解决你的问题,请参考以下文章