LeetCode-100. Same Tree (Java)

来源:互联网 发布:nero刻录软件免费版 编辑:程序博客网 时间:2024/06/06 14:07

Given two binary trees, write a function to check if they are equal or not.

Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

--------------------------------------------------------------------------------------------------------------------------

题意

判断两个二叉树是否相同,需要节点值以及树结构相同。

思路

考虑到树结构需要相同,我首先想到了通过不同遍历方式组合可以唯一确定一个树,判断节点是否相同,则直接

比较字符串是否相同即可。

关于唯一确定二叉树的集中遍历组合

组合一:前序+中序

组合二:前序+后序

组合三:中序+后序

这里,我用了组合一。

代码

public class Solution {    public boolean isSameTree(TreeNode p, TreeNode q) {        boolean flag = false;String preOrderOfP = preOrder(p);String preOrderOfQ = preOrder(q);String inOrderOfP = inOrder(p);String inOrderOfQ = inOrder(q);if(preOrderOfP.equals(preOrderOfQ) && inOrderOfP.equals(inOrderOfQ)){flag = true;}return flag;    }    //先序遍历    public static String preOrder(TreeNode node){    if(node == null){    return "null";    }        return node.val+"" +preOrder(node.left)+preOrder(node.right);    }    //中序遍历    public static String inOrder(TreeNode node){    String s = null;    if(node == null){    return "null";    }    return inOrder(node.left)+node.val+""+inOrder(node.right);    }}

还有另外一种耗时更短的方法

public class Solution {    public boolean isSameTree(TreeNode p, TreeNode q) {        if( p == null && q == null )            return true;                    if( (p == null && q != null)  || (q == null && p != null))            return false;                if ( p.val != q.val)            return false;                   return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);    }}

这个方法则是利用相同的遍历方式,同时对两个二叉树的左(右)孩子进行遍历,然后进行判断。此方法更简洁。