题目:
请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
算法:
方法一:dfs找出两个节点的所有叶子节点,再进行比较
func leafSimilar(root1 *TreeNode, root2 *TreeNode) bool {
arr1 := make([]int, 0)
arr2 := make([]int, 0)
var getLeaf func(node *TreeNode, array *[]int)
getLeaf = func(node *TreeNode, array *[]int) {
if node == nil {
return
}
getLeaf(node.Left, array)
getLeaf(node.Right, array)
if node.Left == nil && node.Right == nil {
*array = append(*array, node.Val)
}
}
getLeaf(root1, &arr1)
getLeaf(root2, &arr2)
i, j := 0, 0
for i < len(arr1) && j < len(arr2) {
if arr1[i] != arr2[j] {
break
}
i ++
j ++
}
return i == len(arr1) && j == len(arr2)
}
方法二:没有一边查找,一边比较的方式吗。不用把所有的叶子节点都查找出来。