LeetCode 二叉樹剪枝 814

2022-03-11 06:52:48 字數 1376 閱讀 4651

給定二叉樹根結點root,此外樹的每個結點的值要麼是 0,要麼是 1。

返回移除了所有不包含 1 的子樹的原二叉樹。

( 節點 x 的子樹為 x 本身,以及所有 x 的後代。)

示例1:

輸入: [1,null,0,0,1]

輸出: [1,null,0,null,1]

解釋:

只有紅色節點滿足條件「所有不包含 1 的子樹」。

右圖為返回的答案。

示例2:

輸入: [1,0,1,0,0,0,1]

輸出: [1,null,1,null,1]

示例3:

輸入: [1,1,0,1,1,0,1,0]

輸出: [1,1,0,1,1,null,1]

說明:看了三個示例,才搞清楚這個題的意思,是把所有為0的葉子節點或所有節點為0的子樹設為null即可

根據說明給出的數值範圍,可知演算法的複雜度不會低。

對二叉樹進行搜尋,無非dfs、bfs兩種方式,此處最好的方式是採用dfs。我覺得這道題的關鍵點是在對節點設為null的過程中,可能會由於引用的問題,導致樹的修改失敗

舉個例子:

public treenode prunetreecore(treenode root)

prunetreecore(root.left);

prunetreecore(root.right);

if(root==條件)

root==null

}

這樣子並不是在原先的樹上進行修改,而只是將實參指向了null

所以,我們在遞迴的過程中對樹進行實時的構建是什麼重要的,以保證樹的節點進行了修改

這道題的演算法邏輯很清晰,此處就不放置流程圖了。

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

public treenode prunetreecore(treenode root)

}

LeetCode 二叉樹剪枝(遞迴)

給定二叉樹根結點 root 此外樹的每個結點的值要麼是 0,要麼是 1。返回移除了所有不包含 1 的子樹的原二叉樹。節點 x 的子樹為 x 本身,以及所有 x 的後代。示例1 輸入 1,null,0,0,1 輸出 1,null,0,null,1 解釋 只有紅色節點滿足條件 所有不包含 1 的子樹 右...

(二叉樹)15 二叉樹剪枝

給定二叉樹根結點 root 此外樹的每個結點的值要麼是 0,要麼是 1。返回移除了所有不包含 1 的子樹的原二叉樹。節點 x 的子樹為 x 本身,以及所有 x 的後代。示例1 輸入 1,null,0,0,1 輸出 1,null,0,null,1 解釋 只有紅色節點滿足條件 所有不包含 1 的子樹 右...

Leetcode 814 二叉樹剪枝

time 20190906 type medium 給定二叉樹根結點 root 此外樹的每個結點的值要麼是 0,要麼是 1。返回移除了所有不包含 1 的子樹的原二叉樹。節點 x 的子樹為 x 本身,以及所有 x 的後代。示例1 輸入 1,null,0,0,1 輸出 1,null,0,null,1 解...