题目:
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
算法:
方法一:层序遍历
func findBottomLeftValue(root *TreeNode) int {
array := make([]*TreeNode, 1)
ans := 0
array[0] = root
for len(array) != 0 {
ans = array[0].Val
length := len(array)
for i := 0; i < length; i ++ {
if array[i].Left != nil {
array = append(array, array[i].Left )
}
if array[i].Right != nil {
array = append(array, array[i].Right )
}
}
array = array[length:]
}
return ans
}
方法二:深度遍历
比较root左子树的最左下角和右子树的最左下角的深度
func findBottomLeftValue(root *TreeNode) int {
var curVal, curHeight int
var dfs func(node *TreeNode, depth int)
dfs = func(node *TreeNode, depth int) {
if node == nil {
return
}
depth ++
// 先遍历左节点,让左节点触发if depth > curHeight,同一层最左侧之后的节点不会再触发该条件
dfs(node.Left, depth)
dfs(node.Right, depth)
// 每次遍历到新的一层第一个元素时触发
if depth > curHeight {
curHeight = depth
curVal = node.Val
}
}
dfs(root, 0)
return curVal
}