輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
二叉樹:在電腦科學中,二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。
解題思路:
先求出根節點(前序序列第乙個元素)。
將根節點帶入到中序遍歷序列中求出左右子樹的中序遍歷序列。
通過左右子樹的中序序列元素集合帶入前序遍歷序列可以求出左右子樹的前序序列。
左右子樹的前序序列第乙個元素分別是根節點的左右兒子
求出了左右子樹的4種序列可以遞迴上述步驟
**如下:
/**
* definition for binary tree
* public class treenode
* }*/public class solution
return construct(pre, 0, pre.length - 1, in, 0, in.length - 1);
}public treenode construct(int pre, int p_start, int p_end, int in, int i_start, int i_end)
treenode node = new treenode(pre[p_start]);
node.left = construct(pre, p_start + 1, p_start + start - i_start, in, i_start, start - 1);
node.right = construct(pre, p_start + start - i_start + 1, p_end, in, start + 1, i_end);
return node;
}}
劍指offer程式設計題《重建二叉樹》
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。我們都知道,通過前序遍歷和中序遍歷或後序遍歷和中序遍歷可以唯一確定一棵二叉樹。前序 根 左 右 中序 左 根 右 後序 左 右 根 ...
劍指offer程式設計題 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。這道題目是一道非常經典的題目,這裡可以用乙個hash表存下中序遍歷的value的index,可以快速找到index definiti...
劍指offer程式設計題 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。方案 在二叉樹的前序遍歷序列中,第乙個數字總是樹的根節點的值 在二叉樹的中序遍歷序列中,根節點的值在序列的中間,根節點左側...