您的位置:首页 > 其它

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

2017-10-25 19:34 399 查看
package com.dixin.temp;
import org.junit.Test;
import java.util.ArrayList;

/**
* Created by admin on 2017/10/25.
* 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
*/
public class I {
class TreeNode {//内部类二叉树类
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
//思路:用先序或者中序或者后序遍历,两树应该一致
//注意:此题先序遍历不好使,一开始就用的先序,先序左与右分开,遍历时中间会插入别的元素
if(root1==null||root2==null) {
return false;
}
ArrayList<TreeNode> list1=new ArrayList<>();//A树的中序遍历
ArrayList<TreeNode> list2=new ArrayList<>();//B树的中序遍历
pre(root1,list1);
pre(root2,list2);
StringBuffer sb1=new StringBuffer();//StringBuffer相比于String更适合做字符串连接
for(int i=0;i<list1.size();i++) {
sb1.append(list1.get(i).val);
}
StringBuffer sb2=new StringBuffer();
for(int i=0;i<list2.size();i++) {
sb2.append(list2.get(i).val);
}
//判断字符串2是否是字符串1的字串
return sb1.toString().indexOf(sb2.toString())>=0?true:false;
}

public void pre(TreeNode root,ArrayList<TreeNode> list) {//我用的中序遍历中左右
if(root==null) {
return;
}
list.add(root);
pre(root.left,list);
pre(root.right,list);
}
@Test
public void test() {
TreeNode root1=new TreeNode(1);
root1.left=new TreeNode(2);
root1.right=new TreeNode(3);
TreeNode root2=new TreeNode(1);
root2.left=new TreeNode(2);
root2.right=new TreeNode(3);
HasSubtree(root1,root2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐