輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
解題思想:每次從前序遍歷中獲取根節點,每次從中序遍歷中獲取左右子樹長度一遍在前序遍歷中劃分左右子樹找到相應子樹的根節點。過程:一棵樹的前序遍歷第乙個元素必然是根節點,然後根據這個根節點在中序遍歷中查詢根節點對應位置,獲取左右子樹長度,得到對應前序遍歷中左右子樹範圍。以左右子樹長度是否為0來判斷結束。標紅字段重點看即可。
package test;
class treenode
}class buildtree
public treenode reconstructbinarytree()
/** 查詢根節點在中序遍歷in中的位置
* * */
public int findroot(int value)
return indexofroot;
}/* @treelen 子樹長度
* @left 是否為上一根節點的左子樹
* @lastroot_in 根節點在中序遍歷中的位置
* @root_pre 根節點在前序遍歷中的位置,右子樹時作相應變化
* @start,end 子樹在中序遍歷中的範圍
* */
public treenode constructbinarytree(int treelen,boolean left,int lastroot_in,int root_pre,int start,int end)
treenode result=null;
int index_root_pre;
int indexroot;
int leftlen;
int rightlen;
if(left)
else
result.left=constructbinarytree(leftlen,true,indexroot,index_root_pre,start,indexroot-1);
result.right=constructbinarytree(rightlen,false,indexroot,index_root_pre+leftlen,indexroot+1,end);
return result;}}
public class solution ;
int in=;
buildtree b=new buildtree(pre,in);
b.reconstructbinarytree();
system.exit(0);}}
劍指offer 重構二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。1.前序遍歷 前序遍歷的規則 先根節點,後左子樹,再右子樹 2.中序遍歷 中序遍歷的規則 先左子樹,後根節點,再右子樹 3.求重構二...
劍指Offer 重構二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出如下圖所示的二叉樹並輸出它的頭結點。在二叉樹的前序遍歷序列中,第乙個數字總是樹的根結點的值。但在中序遍歷序列中,根結點的值在序列的中間,左...
劍指Offer 重構二叉樹
給定二叉樹的先序遍歷和中序遍歷 重新生成二叉樹 public class reconstructbinarytree public treenode reconstructbinarytree int pre int in 遞迴得到先序遍歷起止點為prestart和preend,中序遍歷起止點為in...