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);
}
}
这个方法则是利用相同的遍历方式,同时对两个二叉树的左(右)孩子进行遍历,然后进行判断。此方法更简洁。