前言:當構建好二叉樹之後,樹的三種遍歷可以使用簡單的遞歸來實現
1.我們將要遍歷的樹:
2.實現的源代碼:
#include<iostream> struct TreeNode{ int value; TreeNode* lChild; TreeNode* rChild; }; TreeNode* buildTree(int tnv[],int nodeNumber){ TreeNode* nodes[nodeNumber]; for(int i=0; i<nodeNumber; i++){ nodes[i] = new TreeNode; nodes[i]->value = tnv[i]; nodes[i]->lChild = NULL; nodes[i]->rChild = NULL; } //connect all the nodes int lChildIndex=0,rChildIndex=0; for(int i=0; i<nodeNumber; i++){ //left child connect lChildIndex = 2*i + 1; if(lChildIndex < nodeNumber) nodes[i]->lChild = nodes[lChildIndex]; rChildIndex = 2*i + 2; if(rChildIndex < nodeNumber) nodes[i]->rChild = nodes[rChildIndex]; } return nodes[0]; } //preoder a tree void preoder(TreeNode* root){ TreeNode* p = root; std::cout<<p->value<<" "; if(p->lChild) preoder(p->lChild); if(p->rChild) preoder(p->rChild); } //inorder a tree void inorder(TreeNode* root){ TreeNode* p=root; if(p->lChild) inorder(p->lChild); std::cout<<p->value<<" "; if(p->rChild) inorder(p->rChild); } //postorder a tree void postorder(TreeNode* root){ TreeNode* p=root; if(p->lChild) postorder(p->lChild); if(p->rChild) postorder(p->rChild); std::cout<<p->value<<" "; } int main(){ int treeNodeValue[]={5,3,7,2,4,6}; int treeNodeNumbers = sizeof(treeNodeValue)/sizeof(int); TreeNode* root; root = buildTree(treeNodeValue,treeNodeNumbers); preoder(root); std::cout<<std::endl; inorder(root); std::cout<<std::endl; postorder(root); std::cout<<std::endl; return 0; }
3.運行結果: