二叉樹遍歷C++(前、中、後序遍歷,層次遍歷、深度遍歷)
阿新 • • 發佈:2018-12-13
一.使用c++進行前中後遍歷,層次和深度遍歷(非遞迴)
二.程式碼
#include<iostream> #include<queue> #include<vector> #include<stack> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; void PreOrder(TreeNode *T)//前序遍歷 { if (!T) return; if (T) { cout << T->val<<endl; PreOrder(T->left); PreOrder(T->right); } } void PreOrder(TreeNode *T)//非遞迴,前序遍歷 { if (T == NULL) { return; } stack<TreeNode*>s; s.push(T); TreeNode *temp; while (!s.empty()) { temp = s.top(); cout << temp->val; s.pop(); if (temp->left) { s.push(temp->left); } if (temp->right) { s.push(temp->right); } } } void InOrder(TreeNode *T)//中序遍歷 { if (!T) return; InOrder(T->left); cout << T->val; InOrder(T->right); } void PostOrder(TreeNode *T)//後序遍歷 { if (!T) return; PostOrder(T->left); PostOrder(T->right); cout << T->val; } void Levelorder(TreeNode *T)//層析遍歷 { if (!T) return; TreeNode *temp; queue<TreeNode*>q; q.push(T); while (!q.empty()) { temp = q.front(); cout << temp->val; if (temp->left) q.push(temp->left); if (temp->right) q.push(temp->right); q.pop(); } } void DeepOrder(TreeNode *T)//深度遍歷 { if (!T) return; TreeNode *temp; stack<TreeNode*>s; s.push(T); while (!s.empty()) { temp = s.top(); cout << temp->val; s.pop(); if (temp->left) s.push(temp->left); if (temp->right) s.push(temp->right); } }