題目內容
結果:部分通過(16%)
/**
* definition for binary tree
* public class treenode
* }*/public
class
solution
/*劃分子樹,然後在對子樹進行遍歷*/
public treenode build
(int
pre,
int startpre,
int endpre,
int[
] in,
int startin,
int endin)
int i=
find
(in,pre[startpre+1]
);if(iendin)
i=find
( in,pre[startpre]);
//確定左節點
t.left =
build
(pre, startpre+
1, i - startin + startpre, in, startin, i-1)
;//確定右節點
t.right =
build
(pre, endpre-
(endin-i)+1
, endpre, in, i +
1, endin)
;return t;}/*
*查詢x在陣列a中的位置
*/public
intfind
(int
a,int x)
}//沒找到返回-1
return-1
;}}
分析:我以為進入build
這個方法,給定序列的start都是小於等於end的。然而並不是這樣,可能start>end
結果:通過
既然可能start>end,那麼我就在設定左右節點時,強制要求start<=end才進去
/**
* definition for binary tree
* public class treenode
* }*/public
class
solution
/*劃分子樹,然後在對子樹進行遍歷*/
public treenode build
(int
pre,
int startpre,
int endpre,
int[
] in,
int startin,
int endin)
int i=
find
(in,pre[startpre+1]
);if(iendin)
i=find
( in,pre[startpre]);
/*確定左節點*/
if(startpre+
1<=i - startin + startpre && startin<=i-1)
/*確定右節點*/
if( endpre-
(endin-i)+1
<=endpre && i+
1<=endin)
return t;}/*
*查詢x在陣列a中的位置
*/public
intfind
(int
a,int x)
}//沒找到返回-1
return-1
;}}
子樹序號
先序序列pre
中序序列in
1(當前節點值1)
1,2,3,4,5,6,7
3,2,4,1,6,5,7
2(當前節點值2)
2,3,4
3,2,4
3(當前節點值3)33
此時,我們發現3後面的節點4不在序號為3的子樹中,所以遞迴結束。
二叉樹 重建二叉樹
問題 給定二叉樹的前序遍歷結果和中序遍歷結果,恢復出原二叉樹。假設二叉樹中的元素都不重複,給定二叉樹的前序遍歷序列,二叉樹的中序遍歷序列。看到此題,我首先想到的是尋找根節點,由前序遍歷序列可以看出根節點為1,此時通過中序遍歷可以看出來4,7,2在根節點的左子樹,5,3,8,6在樹的右節點。此時我們可...
二叉樹 重建二叉樹
題目給定兩個陣列,乙個是前序遍歷陣列 preorder 乙個是中序遍歷陣列 inorder 要求輸出還原二叉樹 核心在於我們要理解前序和中序便利的特點 前序遍歷 根節點 左節點 右節點 中序遍歷 左節點 根節點 右節點 所以我們從二叉樹的根節點開始重構 也就是preorder的第乙個值 同時用乙個m...
二叉樹重建
摘自劉汝佳的 演算法競賽入門經典 preorder t t 的根結點 preorder t 的左子樹 preorder t 的右子樹 inorder t inorder t 的左子樹 t 的根結點 inorder t 的右子樹 postorder t postorder t 的左子樹 postord...