判断两个树是否相同的Java程序
1 简介
在此程序中,我们需要检查两棵树是否相同。为了使两棵树相同,它们必须满足两个条件:
- 两棵树的结构应相同。
- 一棵树中存在的节点应该出现在另一棵树中。
上图包含三棵树,即A,B和C。树A和B相同,因为它们在结构上相同,并且所有节点的值都相同。但是,树A和C在结构上相同,但不相同,因为两个树中的节点都不同。
2 算法思路
- 定义具有三个属性的Node类,即:左和右数据。在此,左代表节点的左子节点,右代表节点的右子节点。
- 创建节点时,数据将传递到该节点的data属性,并且左右都将设置为null。
- 定义另一个具有属性根的类。
- 根表示树的根节点,并将其初始化为null。
- areIdenticalTrees()将检查两棵树是否相同:
- 如果两个树的根节点都为空,则它们是相同的。
- 如果仅一棵树的根节点为空,则树不相同,则返回false。
- 如果没有一棵树的根节点为空,则检查两个节点的数据是否相等,然后递归检查一棵树的左子树和右子树是否与另一棵树相同。
3 程序实现
/**
* 一点教程网: http://www.yiidian.com
*/
public class IdenticalTrees {
//Represent the node of the binary tree
public static class Node{
int data;
Node left;
Node right;
//Assign data to the new node, set left and right children to null
public Node(int data){
this.data = data;
this.left = null;
this.right = null;
}
}
//Represent the root of the binary tree
public Node root;
public IdenticalTrees(){
root = null;
}
//areIdenticalTrees() finds whether two trees are identical or not
public static boolean areIdenticalTrees(Node root1, Node root2) {
//Checks if both the trees are empty
if(root1 == null && root2 == null)
return true;
//Trees are not identical if root of only one tree is null thus, return false
if(root1 == null && root2 == null)
return true;
//If both trees are not empty, check whether the data of the nodes is equal
//Repeat the steps for left subtree and right subtree
if(root1 != null && root2 != null) {
return ((root1.data == root2.data) &&
(areIdenticalTrees(root1.left, root2.left)) &&
(areIdenticalTrees(root1.right, root2.right)));
}
return false;
}
public static void main(String[] args) {
//Adding nodes to the first binary tree
IdenticalTrees bt1 = new IdenticalTrees();
bt1.root = new Node(1);
bt1.root.left = new Node(2);
bt1.root.right = new Node(3);
bt1.root.left.left = new Node(4);
bt1.root.right.left = new Node(5);
bt1.root.right.right = new Node(6);
//Adding nodes to the second binary tree
IdenticalTrees bt2 = new IdenticalTrees();
bt2.root = new Node(1);
bt2.root.left = new Node(2);
bt2.root.right = new Node(3);
bt2.root.left.left = new Node(4);
bt2.root.right.left = new Node(5);
bt2.root.right.right = new Node(6);
//Displays whether both the trees are identical or not
if(areIdenticalTrees(bt1.root, bt2.root))
System.out.println("Both the binary trees are identical");
else
System.out.println("Both the binary trees are not identical");
}
}
输出结果为:
Both the binary trees are identical
热门文章
优秀文章