下面用先根遍历的思路描述算法的步骤:
若两棵二叉树都为空,则两棵二叉树相等,返回true;
若两棵二叉树都非空,则
- 若根结点的值相等,则继续判断它们的左子树是否相等;
- 若左子树相等,则再继续判断它们的右子树是否相等;
- 若右子树也相等,则两棵二叉树相等,返回true。
任何其他情况都返回false
二叉链式存储结构的结点类描述:
package tree;
public class BiTreeNode {
public Object data;
public BiTreeNode lchild,rchild; //左右孩子域
//构造一个空节点
public BiTreeNode() {
this(null);
}
//构造一颗左、右孩子域为空的二叉树
public BiTreeNode(Object data) {
this(data,null,null);
}
//构造一棵数据域和左、右孩子域都不为空的二叉树
public BiTreeNode(Object data,BiTreeNode lchild,BiTreeNode rchild) {
this.data=data;
this.lchild=lchild;
this.rchild=rchild;
}
}
二叉链式存储结构下二叉树类的描述:
package tree;
import java.util.LinkedList;
import java.util.Queue;
public class BiTree {
public BiTreeNode root; //树的根节点
public BiTree() {
this.root=null;
}
public BiTree(BiTreeNode root) {
this.root=root;
}
//判断两棵二叉树是否相等算法
public boolean isEqual(BiTreeNode T1,BiTreeNode T2) {
if(T1==null && T2==null) //同时为空
return true;
if(T1!=null && T2!=null) //同时非空进行比较
if(T1.data.equals(T2.data)) //根结点的值是否相等
if(isEqual(T1.lchild,T2.lchild)) //左子树是否相等
if(isEqual(T1.lchild,T2.rchild)) //右子树是否相等
return true;
return false;
}
//判断两棵二叉树是否相等的递归算法
public boolean isEqual2(BiTreeNode T1,BiTreeNode T2) {
if(T1==null && T2==null)
return true;
else if(T1!=null && T2!=null) {
return (T1.data.equals(T2.data) && (isEqual(T1.lchild,T2.lchild)) && (isEqual(T1.rchild,T2.rchild)));
}
else
return false;
}
}

本文介绍了如何通过先根遍历判断两棵二叉树是否相等。当两棵二叉树都为空时,它们相等;非空时,如果根节点值相等且左、右子树分别相等,则两棵二叉树也相等。否则,返回不相等。
775





