LeetCode二叉樹DFS筆試題整理

2021-10-09 21:23:25 字數 2862 閱讀 5263

public

treenode

buildtree

(int

inorder

,int

postorder

)int

leftinorder

=arrays

.copyofrange

(inorder,0

,rootvalidx);

int[

]rightinorder

=arrays

.copyofrange

(inorder

,rootvalidx+1

,inorder

.length);

//根據分出的左右子樹,找到後序遍歷中左右臨界點

int[

]leftpostorder

=new

int;

int[

]rightpostorder

=new

int;

if(leftinorder

.length==

0)elseif(

rightinorder

.length==

0)else//

判斷當前節點下乙個節點是否在右子樹

boolean

rightflag

=false

;for

(intj=

0;i+

1<

postorder

.length&&

j<

rightinorder

.length&&

!rightflag;j

++)/

/當前在左子樹,下乙個在右子樹,把當前節點的下乙個作為分界點if(

leftflag&&

rightflag

)mididx=i

+1;}

//從後序遍歷序列中切出左右子樹

leftpostorder

=arrays

.copyofrange

(postorder,0

,mididx);

rightpostorder

=arrays

.copyofrange

(postorder

,mididx

,postorder

.length-1)

;}//

遞迴對左子樹的中序、後序序列構建

root

.left

=buildtree

(leftinorder

,leftpostorder);

//遞迴對右子樹的中序、後序序列構建

root

.right

=buildtree

(rightinorder

,rightpostorder);

return

root

;}

public

intsumnumbers

(treenode

root

)private

intsumnumbers

(treenode

root

,int

lastsum

)

public

static

list

<

integer

>

flipmatchvoyage

(treenode

root

,int

voyage)if

(idx

<

voyage

.length&&

node

.left!=

null&&

node

.left

.val!=

voyage

[idx])

else

}return

res;

}

list

<

integer

>

list

=new

arraylist

<

>()

;if(root==

null

)return

list;/

/記錄葉子節點的深度if(

root

.left==

null&&

root

.right==

null

)list

.add

(level);

//遞迴獲得左右子樹葉子節點深度

list

<

integer

>

left

=dfs

(root

.left

,level+1

,distance);

list

<

integer

>

right

=dfs

(root

.right

,level+1

,distance);

//判斷當前節點的左右子樹中復合條件的葉子節點對數

for(

intl:left)}

//左右子樹的葉子節點合併向上層傳遞

list

.addall

(left);

list

.addall

(right);

return

list

;

二叉樹 筆1

關於二叉樹中,對於前序 中序 後序三者中,知道知道兩個,求另外的乙個有什麼方法?比如題目 若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其後序遍歷的結點訪問順序是 解答過程 1 定 釋 樹的遍歷的三種情況,是根據左子樹 右子樹 根這3者的不同訪問次序來定義的。...

leetcode 二叉樹 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...

LeetCode (二叉樹)反轉二叉樹

遞迴交換每乙個節點的左右子樹,重點在於訪問每乙個節點,然後交換左右子樹 definition for a binary tree node.struct treenode struct treenode inverttree struct treenode root 由於至少要講每乙個節點都訪問一次...