LeetCode-Find Bottom Left Tree Value
阿新 • • 發佈:2018-11-01
一、Description
Given a binary tree, find the leftmost value in the last row of the tree.
題目大意:
給出一個二叉樹,找出最後一行最左邊的結點值。
Example 1:
Input: 2 / \ 1 3 Output: 1
Example 2:
Input: 1 / \ 2 3 / / \ 4 5 6 / 7 Output: 7
二、Analyzation
這裡提供兩種思路:
1.先求出二叉樹的高度,然後通過層次遍歷,等到遍歷到最後一行時,直接返回此時佇列中的第一個結點即為所求,見程式碼一。
2.在遞迴函式的引數列表中加入一個level,在遞迴遍歷的同時level加一,如果在同一層,那麼首先遞迴返回的一定是該層最左邊的結點(根據遞迴順序),因此最後的left即為所求。
三、Accepted code
程式碼一:
class Solution { public int findBottomLeftValue(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); int h = height(root); int val = 0, size = 0; queue.add(root); while (!queue.isEmpty()) { h--; if (h == 0) { val = queue.poll().val; break; } size = queue.size(); while (size > 0) { TreeNode node = queue.poll(); if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } size--; } } return val; } public int height(TreeNode root) { if (root == null) { return 0; } if (root.left == null && root.right == null) { return 1; } int leftHeight = 0, rightHeight = 0; if (root.left != null) { leftHeight = height(root.left) + 1; } if (root.right != null) { rightHeight = height(root.right) + 1; } return leftHeight > rightHeight ? leftHeight : rightHeight; } }
程式碼二:
class Solution { int left = 0; int preLevel = 0; public int findBottomLeftValue(TreeNode root) { left = root.val; help(root, 0); return left; } public void help(TreeNode root, int level) { if(root.left != null) { help(root.left, level + 1); } if(root.right != null) { help(root.right, level + 1); } if(level > preLevel) { left = root.val; preLevel = level; } } }