劍指offer面試題7 重建二叉樹

2021-10-09 06:26:05 字數 1923 閱讀 6052

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷序列,則重建如圖2.6所示的二叉樹並輸出它的頭節點。

/** * 重建二叉樹

* 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該而擦函式。

* 假設輸入的前序遍歷和中序遍歷的結果中不含重複的數字

*/class binarytreenode

public binarytreenode(int val, binarytreenode left,binarytreenode right)

//前序遍歷

public void preorder()

private void preorder(binarytreenode node)

if(node.right != null)

}//中序遍歷

public void inorder()

private void inorder(binarytreenode node)

system.out.println(node.val);

if(node.right != null)

}}public class problems_7 ;

int inorder = ;

binarytreenode root = construct(preorder, inorder);

system.out.println("前序遍歷:*****=");

root.preorder();

system.out.println("中序遍歷:*****=");

root.inorder();

}public static binarytreenode construct(int preorder,int inorder)

return constructcore(preorder,0,preorder.length-1,inorder,0,inorder.length-1);

}private static binarytreenode constructcore(int preorder, int startpreorder, int endpreorder,

int inorder, int startinorder, int endinorder)

//查詢根節點中序遍歷陣列的位置

int rootinorder = startinorder;

while(rootinorder <= endinorder && rootvalue != inorder[rootinorder])

//迴圈結束後,rootinorder指向中序遍歷陣列中的根節點的位置

//leftlength 代表根節點左側有幾個數字,也就是根節點的左子樹的總節點數

int leftlength = rootinorder - startinorder;

//rightlength 代表根節點右側有幾個數字,也就是根節點的右子樹的總節點數

int rightlength = endinorder - rootinorder;

//leftlength > 0 說明根節點的左子樹的總節點數不為0,那麼就開始構建左子樹

if(leftlength > 0)

//rightlength > 0 說明根節點的右子樹的總節點數不為0,那麼就開始構建右子樹

if(rightlength > 0)

return root;}}

劍指offer面試題7 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class solution struct treenode reconstruct int l1,int r1,int l2 pr...

劍指Offer 面試題7 重建二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷,則重建如圖2.6所示的二叉樹並輸出它的頭節點。分析 前序遍歷 先根,再左,後右 中序遍歷 先左,再根,後右。那麼前序遍歷的第乙個是根,在中序遍歷中找到...

劍指offer 面試題7 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出二叉樹並輸出他的根節點。二叉樹的定義如下 public static class binarytreenode 在二叉樹的前序遍歷中,第乙個數字總...