农民代表
- 积分
- 5576
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-8-15
- 最后登录
- 1970-1-1
|
// helper method to find the position of the root of the subtree at the main tree;
public static TreeNode FindSubRoot(TreeNode mainRoot, TreeNode subRoot){
TreeNode ptr1, ptr2;
ptr1 = mainRoot;
ptr2 = subRoot;
TreeNode result = new TreeNode();
if(ptr1.data == ptr2.data){
// if the conditions are the same that they both are the deepest leaves in the tree;
if(ptr1.left == null && ptr2.left == null && ptr1.right == null && ptr2.right == null ||
ptr1.left!= null && ptr2.left != null && ptr1.left.data == ptr2.left.data &&
ptr1.right!=null && ptr2.right !=null && ptr1.right.data == ptr2.right.data ||
ptr1.left == null && ptr2.left == null && ptr1.right !=null && ptr2.right != null
&& ptr1.right.data == ptr2.right.data ||
ptr1.right == null && ptr2.right == null && ptr1.left != null && ptr2.left != null
&& ptr1.left.data == ptr2.left.data ||
ptr1.left != null && ptr2.left != null && ptr1.left.data == ptr2.left.data &&
ptr1.right != null && ptr2.right != null && ptr2.right.data == ptr2.right.data){
result = ptr1;
}
}
else if(ptr1.data != ptr2.data){
if(ptr1.left != null){
ptr1 = ptr1.left;
result = FindSubRoot(ptr1, ptr2);
}
else if(ptr1.right != null){
ptr1 = ptr1.right;
result = FindSubRoot(ptr1, ptr2);
}
}
return result;
}
// checking if the subtree is in the main tree;
public static boolean isSubtree(TreeNode mainRoot, TreeNode subRoot) {
TreeNode ptr1, ptr2, node;
ptr1 = mainRoot;
ptr2 = subRoot;
// find the position of root of subtree at the main tree;
ptr1 = FindSubRoot(ptr1, ptr2);
boolean flag = true;
if(ptr1.data != ptr2.data){
flag = false;
}
else if(ptr1 != null && ptr2 == null || ptr2 != null && ptr1 == null){
flag = false;
}
if(ptr1.data == ptr2.data && ptr1.left != null && ptr2.left != null){
flag = isSubtree(ptr1.left, ptr2.left);
}
if(ptr1.data == ptr2.data && ptr1.right != null && ptr2.right !=null){
flag = isSubtree(ptr1.right, ptr2.right);
}
return flag;
}
/************* Main Method *************/
public static void main(String[] args) {
System.out.println("\n********* HW 4.7 **************");
System.out.println("Find if the subtree is part of the main tree");
TreeNode node16 = new TreeNode();
TreeNode node17 = new TreeNode();
TreeNode node18 = new TreeNode();
TreeNode node19 = new TreeNode();
TreeNode node20 = new TreeNode();
TreeNode node21 = new TreeNode();
TreeNode node22 = new TreeNode();
TreeNode node23 = new TreeNode();
TreeNode node24 = new TreeNode();
node16.setData(15);
node17.setData(10);
node18.setData(18);
node19.setData(8);
node20.setData(12);
node21.setData(17);
node22.setData(19);
node23.setData(25);
// subtree node;
node24.setData(20);
// version 1
// insertNode(node19, node17);
// insertNode(node20, node17);
// version 2
// insertNode(node16, node24);
// insertNode(node17, node24);
// insertNode(node18, node24);
// insertNode(node19, node24);
// insertNode(node20, node24);
// insertNode(node21, node24);
// insertNode(node22, node24);
// insertNode(node23, node24);
// version 3
insertNode(node23, node24);
insertNode(node16, node24);
boolean isSubTree = isSubtree(root, node24);
System.out.println("Is the subtree in the main tree? \n" + isSubTree);
/**********************************/
}
|
|