二叉树的叶子节点序列是指从左到右的叶子节点值。
两个二叉树的叶子节点序列值一样的话认为是叶子相似的树。
判断两个二叉树是不是节点相似的树。
思路:
不要想着同时遍历两个树,在遍历的过程中比较,它们的结构可能是不一样的。
找叶子节点简单,只要左子树和右子树都是null,它就是叶子节点。
遍历每个树,保存叶子节点序列,这里用前序遍历。
再比较两个序列是不是相等即可。
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
preOrder(root1, list1);
preOrder(root2, list2);
return list1.equals(list2);
}
void preOrder(TreeNode root, List<Integer> list) {
if(root == null) return;
if(root.left == null && root.right == null) list.add(root.val);
preOrder(root.left, list);
preOrder(root.right, list);
}