T106從中序與後序遍歷序列構造二叉樹

2021-10-24 12:35:45 字數 859 閱讀 3872

思想:跟從前序和中序序列構造二叉樹相反,這裡依據後序遍歷來確定每個子樹的root,基於後序遍歷的特定可知

當前子樹區間的最後乙個節點即為其root,然後去中序遍歷序列中找到這個root的位置即為rootidx,則在對應的中序區間[instart,int inend]中從[rootidx+1,inend]即為其右子樹區間,然後根據右子樹區間是否為空(也就是中序區間是否越界)來判定root是否有右孩子,如果有的話則root的右孩子一定是後序序列中root的前乙個,沒有的話則為空,然後其左孩子即為後序序列中第root-(inend-rootidx)-1個數

時間複雜度o(nlogn)(直**不出來時可以用master定理來做)

class solution 

if(instart==inend)

treenode root = new treenode(postorder[rootidx]);

//找到root在中序序列中的位置

int idx = instart;

while(idx<=inend&&inorder[idx]!=root.val)

root.right = helper(inorder,idx+1,inend,postorder,rootidx-1);

root.left = helper(inorder,instart,idx-1,postorder,rootidx-(inend-idx)-1);

return root;

}public treenode buildtree(int inorder, int postorder)

}

LeetCode106 從中序和後序序列構造二叉樹

題目描述 根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7 definition for a binary tre...

106 從中序與後序遍歷序列構造二叉樹

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7 class solution def buildtree sel...

106 從中序與後序遍歷序列構造二叉樹

思路 和105題一樣,這次根節點在後續遍歷的最後,找到它 之後在中序遍歷裡找到根節點。arrays.copyofrange 函式找出中序陣列和後續陣列的左右子樹序列,遞迴,構成樹,返回根節點。不細說了。感覺挺簡單。definition for a binary tree node.public cl...