題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷序列,則重建如圖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 在二叉樹的前序遍歷中,第乙個數字總...