您的位置:首页 > Web前端

Nowcoder-剑指offer-树的子结构

2017-02-11 13:04 330 查看
题目:

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

代码

/**
* Created by xizwu on 2017/2/9.
*/
public class Solution {
public static boolean HasSubtree(Node root1,Node root2){
boolean result = false;
if(root1 != null && root2 != null){
result = doesTreeHaveTree2(root1, root2);

if(!result){
result = HasSubtree(root1.left, root2);
}
if(!result){
result = HasSubtree(root1.right, root2);
}
}
return result;
}

private static boolean doesTreeHaveTree2(Node root1, Node root2){
if(root2 == null){
return true;
}
if(root1 == null){
return false;
}
if(root1.key != root2.key){
return false;
}
return doesTreeHaveTree2(root1.left, root2.left) && doesTreeHaveTree2(root1.right, root2.right);
}

public static void main(String[] args) {

Node root1 = new Node(8);
Node node8 = new Node(8);
Node node7 = new Node(7);

root1.left = node8;
root1.right = node7;

Node node9 = new Node(9);
node8.left = node9;

Node node2 = new Node(2);
node8.right = node2;

Node node4 = new Node(4);
Node node72 = new Node(7);
node2.left = node4;
node2.right = node72;

Node root2 = new Node(8);
Node node92 = new Node(9);
Node node22 = new Node(2);

root2.left = node92;
root2.right = node22;

System.out.println(HasSubtree(root1, root2));
}
}


Node.java

public class Node {
int key=0;
Node left=null;
Node right=null;

public Node(int key){
this.key=key;
}


具体的思路就是:

/*

判断 A树 里面是否有B树 先判断 A树的根 和B树的根的 val值是否一致,如果相同 则判断 A 的左根和B的左根,A的右根和B的右根

然后,如果 A树的根和B树的根不一致,那么 用和 A.left 、A.right和B树相比

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息