513.找树左下角的值

98 阅读1分钟

题目:
给定一个二叉树的 根节点 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
}