力扣解題思路 513 找樹左下角的值

2021-10-08 06:49:27 字數 1284 閱讀 3743

思路:給定乙個二叉樹,在樹的最後一行找到最左邊的值。例如:

input:

1/ \

23// \ 456

/7output:

7

很顯然,這題可以用dfs和bfs來解題,但是由於所求是最後一行的最左邊的值,那麼最合適的是採用層次遍歷樹,也就是bfs遍歷樹。

(方法1:bfs)我們在遍歷樹的每一層的時候用乙個列表來儲存每一層的節點的值,每次遍歷一層前,清除掉之前列表中的值,那麼在退出迴圈後列表中儲存的就是最後一層的資料了,我們取出列表最後乙個值就是最後結果啦ヾ(≧▽≦*)o,完整**如下:

public

intfindbottomleftvalue

(treenode root)

}return list.

get(list.

size()

-1);

}

還要注意的一點是,入佇列的順序不可以顛倒哦,先是右邊入隊再左邊,這樣取出最後乙個才會是左邊哦,或者也可以左邊先入隊再右邊,這樣列表第乙個值也是我們的答案啦~~

但是我看了下,發現這個**好冗餘呀,可不可以把他簡化一點呢,因為整個列表其實有用的就只有最後乙個值,那我們完全可以用root直接來儲存最後乙個幾點呀,甚至都不用一層層的便利了,因為最後乙個便利的一定最左節點了呀(因為是從右到左入隊),改進後的**如下:

public

intfindbottomleftvalue

(treenode root)

return root.val;

}

寫完bfs當然也要挑戰一下dfs呀,dfs與之不同的是要維護乙個層數的最大值和每層的最右節點,這樣每次遇到更大的層數時,更新這個最右節點直到退出遞迴:

int max = integer.min_value;

int res;

public

intfindbottomleftvalue

(treenode root)

public

void

dfs(treenode node,

int depth)

}dfs

(node.left,depth+1)

;dfs

(node.right,depth+1)

;}}

這裡也是一樣的道理,先判斷的一定是每層的第乙個節點,為什麼呢,因為先呼叫dfs的時node.left,所以第乙個被判斷層數的是最左節點,這樣res中儲存的值就是答案啦~

513 找樹左下角的值

給定乙個二叉樹,在樹的最後一行找到最左邊的值。示例 1 輸入 2 1 3 輸出 1 示例 2 輸入 1 2 3 4 5 6 7 輸出 7思路 維護乙個最大深度max depth如果深度更新,則對應的值也更新。這裡注意先更新右邊再更新左邊,這樣最後的值將會是最左邊的值,左邊的值會把右邊的覆蓋掉,如果深...

LeetCode 513 找樹左下角的值

題目描述 給定乙個二叉樹,在樹的最後一行找到最左邊的值。示例 1 輸入 2 1 3 輸出 1 示例 2 輸入 1 2 3 4 5 6 7 輸出 7 注意 您可以假設樹 即給定的根節點 不為 null。思路1 此題目第一眼看到就想起了二叉樹的右檢視。這個題跟此題類似,可以按照二叉樹的左檢視來做,最後只...

leetcode513 找樹左下角的值

給定乙個二叉樹,在樹的最後一行找到最左邊的值。示例 1 輸入 2 1 3 輸出 1 示例 2 輸入 1 2 3 4 5 6 7 輸出 7 注意 您可以假設樹 即給定的根節點 不為 null。在正常的二叉樹層次遍歷中,從左到右遍歷,最後乙個輸出的節點是二叉樹最右下角的節點,那麼每一層從右到左遍歷,則最...