请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。
示例 1:
输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]
输出:true
示例 2:
输入:root1 = [1], root2 = [1]
输出:true
解题思路
定义两个函数,一个是用来查找并且记录第一颗二叉树叶子节点的。第二个函数是用来查找第二颗二叉树叶子节点,并且验证这颗二叉树的叶子节点是否与第一颗的叶子节点序列相同
代码
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/
func leafSimilar(root1 *TreeNode, root2 *TreeNode) bool {root := make([]int,0)var leadfs func(root1 *TreeNode)leadfs= func(root1 *TreeNode) {if root1.Left==nil&&root1.Right==nil{root=append(root,root1.Val)return}if root1.Left!=nil{leadfs(root1.Left)}if root1.Right!=nil{leadfs(root1.Right)}}leadfs(root1)i:=0flag:=truevar check func(root1 *TreeNode)check= func(root1 *TreeNode) {if root1.Left==nil&&root1.Right==nil{if i<len(root)&&root[i]!=root1.Val{flag=false}i++return}if root1.Left!=nil{check(root1.Left)}if root1.Right!=nil{check(root1.Right)}}check(root2)if i!=len(root){return false}return flag}