LeetCode---Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:java eclipse下载64位 编辑:程序博客网 时间:2024/06/15 14:27

题目大意:给出二叉树的中序和后序遍历结果,构造出该二叉树。

算法思想:

1.整体思想同由前序和后序构造二叉树不的差不过。LeetCode---Convert Sorted Array to Binary Search Tree

2.根节点的位置由前序的第一个变为后序的最后一个,只需要重新计算左右子树的区间。

代码如下:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* construct(vector<int>& postorder, vector<int>& inorder,int L1,int R1,int L2,int R2){        if(L1<=R1&&L2<=R2){            TreeNode* root= new TreeNode(postorder[R1]);            int pos=find(inorder.begin(),inorder.end(),postorder[R1])-inorder.begin();            int dis=pos-L2;                      root->left=construct(postorder,inorder,L1,L1+dis-1,L2,pos-1);            root->right=construct(postorder,inorder,L1+dis,R1-1,pos+1,R2);            return root;        }        return NULL;    }    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {        if(inorder.size()==0||postorder.size()==0) return NULL;        return construct(postorder,inorder,0,postorder.size()-1,0,inorder.size()-1);    }};


0 0
原创粉丝点击