1. 程式人生 > >二叉樹前序中序後序

二叉樹前序中序後序

前序遍歷:根節點排最先,然後同級先左後右

中序遍歷:先左後根最後右

後序遍歷:先左後右最後根

層次遍歷:按層次遍歷即可

比如上圖二叉樹遍歷結果

    前序遍歷:ABCDEFGHK

    中序遍歷:BDCAEHGKF

    後序遍歷:DCBHKGFEA

    層次遍歷:ABECFDGHK

主要分析中序遍歷:

可以已知中序和前序或中序和後續求出另外一個。

class Solution {
public:
    TreeNode* buildSubTree(vector<int>& preorder, vector<int>& inorder, int posPre, int posIn, int len) {
        if(0 == len) return NULL;

        int leftLen, rightLen;
        vector<int>::iterator rootPos = find(inorder.begin(), inorder.end(), preorder[posPre]);
        leftLen = rootPos - (inorder.begin() + posIn);
        rightLen = len - 1 - leftLen;
        TreeNode *root = new TreeNode(preorder[posPre]);
        root -> left = buildSubTree(preorder, inorder, posPre + 1, posIn, leftLen);
        root -> right = buildSubTree(preorder, inorder, posPre + 1 + leftLen, posIn + 1 + leftLen, rightLen);
        return root;
    }

    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size() != inorder.size()) return NULL;
        if(0 == preorder.size()) return NULL; 
        return buildSubTree(preorder, inorder, 0, 0, preorder.size());
    }
};