思路:給定乙個二叉樹,在樹的最後一行找到最左邊的值。例如:
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。在正常的二叉樹層次遍歷中,從左到右遍歷,最後乙個輸出的節點是二叉樹最右下角的節點,那麼每一層從右到左遍歷,則最...