二叉树遍历(前、中、后序遍历,层次遍历、深度遍历)

  1 #include<iostream>
  2 #include<queue>
  3 #include<vector>
  4 #include<stack>
  5 using namespace std;
  6 struct TreeNode {
  7     int val;
  8     struct TreeNode *left;
  9     struct TreeNode *right;
 10     TreeNode(int x) :
 11         val(x), left(NULL), right(NULL) {
 12     }
 13 };
 14 void PreOrder(TreeNode *T)//前序遍历
 15 {
 16     if (!T)
 17         return;
 18     if (T)
 19     {
 20         cout << T->val<<endl;
 21         PreOrder(T->left);
 22         PreOrder(T->right);
 23     }
 24     
 25 }
 26 void PreOrder(TreeNode *T)//非递归,前序遍历
 27 {
 28     if (T == NULL)
 29     {
 30         return;
 31     }
 32     stack<TreeNode*>s;
 33     s.push(T);
 34     TreeNode *temp;
 35     while (!s.empty())
 36     {
 37         temp = s.top();
 38         cout << temp->val;
 39         s.pop();
 40         if (temp->left)
 41         {
 42             s.push(temp->left);
 43         }
 44         if (temp->right)
 45         {
 46             s.push(temp->right);
 47         }
 48     }
 49 }
 50  
 51 void InOrder(TreeNode *T)//中序遍历
 52 {
 53     if (!T)
 54         return;
 55     InOrder(T->left);
 56     cout << T->val;
 57     InOrder(T->right);
 58 }
 59  
 60 void PostOrder(TreeNode *T)//后序遍历
 61 {
 62     if (!T)
 63         return;
 64     PostOrder(T->left);
 65     PostOrder(T->right);
 66     cout << T->val;
 67 }
 68 void Levelorder(TreeNode *T)//层析遍历
 69 {
 70     if (!T)
 71         return;
 72     TreeNode *temp;
 73     queue<TreeNode*>q;
 74     q.push(T);
 75     while (!q.empty())
 76     {
 77         temp = q.front();
 78         cout << temp->val;
 79         if (temp->left)
 80             q.push(temp->left);
 81         if (temp->right)
 82             q.push(temp->right);
 83         q.pop();
 84     }
 85 }
 86 void DeepOrder(TreeNode *T)//深度遍历
 87 {
 88     if (!T)
 89         return;
 90     TreeNode *temp;
 91     stack<TreeNode*>s;
 92     s.push(T);
 93     while (!s.empty())
 94     {
 95         temp = s.top();
 96         cout << temp->val;
 97         s.pop();
 98         if (temp->left)
 99             s.push(temp->left);
100         if (temp->right)
101             s.push(temp->right);
102     }
103 }
View Code

转自https://blog.csdn.net/feiyanjia/article/details/82957453

posted @ 2019-09-13 13:53  孤寂!  阅读(102)  评论(0)    收藏  举报