二叉樹樹的先序遍歷,中序遍歷和後序遍歷

前言:當構建好二叉樹之後,樹的三種遍歷可以使用簡單的遞歸來實現

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.運行結果:


發佈了45 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章