二叉树的遍历与深度求法

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 }

以上是二叉树的几个常见的函数,希望对大家的学习有帮助,别忘记点波关注。

以上是关于二叉树的遍历与深度求法的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的前序中序后序遍历相互求法

LeetCode与《代码随想录》二叉树篇:做题笔记与总结-JavaScript版

遍历二叉树的递归与非递归代码实现

二叉树的递归与迭代遍历

写写代码系列028:二叉树的深度优先遍历

二叉树的创建和遍历