二叉樹前序中序後序
阿新 • • 發佈:2019-02-10
前序遍歷:根節點排最先,然後同級先左後右
中序遍歷:先左後根最後右
後序遍歷:先左後右最後根
層次遍歷:按層次遍歷即可
比如上圖二叉樹遍歷結果
前序遍歷: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()); } };