872.叶子相似的树

50 阅读1分钟

题目:
请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列
算法:
方法一: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)
}

方法二:没有一边查找,一边比较的方式吗。不用把所有的叶子节点都查找出来。