二叉树的建立与遍历_51、二叉树遍历-重建二叉树JZ4
生活随笔
收集整理的這篇文章主要介紹了
二叉树的建立与遍历_51、二叉树遍历-重建二叉树JZ4
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹并返回。
思路
回顧三種經典的遍歷:來自鄧俊輝的數據結構dscpp-3rd-第五章二叉樹。
VLR
LRV
LVR
很簡單,遞歸即可。
注意遞歸出口和二叉樹索引的邊界。
/*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* build(vector<int> pre, int p_left, int p_right, vector<int> vin, int v_left, int v_right){if(p_left > p_right || v_left > v_right) return nullptr;TreeNode* root = new TreeNode(pre[p_left]);//建立rootfor(int i=v_left; i<=v_right; i++){if(vin[i] == root->val){root->left = build(pre, p_left+1, p_left+i-v_left, vin, v_left, i-1);//建立左子樹root->right = build(pre, p_left+i-v_left+1, p_right, vin, i+1, v_right);break;}}return root;}TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {return build(pre, 0, pre.size()-1, vin, 0, vin.size()-1);} };總結
以上是生活随笔為你收集整理的二叉树的建立与遍历_51、二叉树遍历-重建二叉树JZ4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 申万一级行业日指数_基金收评 | 指数震
- 下一篇: html制作dnf,dnf怎么制作img