您的位置:首页 > 其它

【leetcode】106. Construct Binary Tree from Inorder and Postorder Traversal

2016-05-03 22:11 369 查看
题目:

Given inorder and postorder traversal of a tree, construct the binary tree.

翻译:
由二叉树的中序遍历和后序遍历还原二叉树。

思路:

做这一题之前可以先看105题,由前序遍历和中序遍历还原二叉树,实现上主要是借助了一个栈。而这一题转变思路之后基本和105题一模一样。 可以从后往前查看后序遍历和中序遍历,最后一个数字一定是根节点。每生成一个节点,都将该节点入栈。如果栈顶元素与中序遍历相应位置上的元素一致,则栈顶出栈,直到某个元素的子节点未完全遍历,则创建它的左分支。

代码:

就在105题的基础上把i,j的初始值从0改为中序遍历长度的size()-1,然后i,j每次减一就可以了。

<span style="font-size:18px;">class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if(inorder.size()==0)
return NULL;
TreeNode* root;
stack<TreeNode*> st;
TreeNode* tr;

int i,j,k;
k=0;
i=j=inorder.size()-1;

root=new TreeNode(postorder[i]);
st.push(root);
tr=root;
i--;

while(i>=0)
{
if (!st.empty() && st.top()->val==inorder[j])
{
tr=st.top();
st.pop();
k=1;
j--;
}
else
{
if (k==0)
{
tr->right=new TreeNode(postorder[i]);
i--;
tr=tr->right;
st.push(tr);
}
else
{
tr->left=new TreeNode(postorder[i]);
i--;
tr=tr->left;
st.push(tr);
k=0;
}
}
}
return root;
}
};</span>

结果:




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode