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

来源:互联网 发布:amx cdc数据 编辑:程序博客网 时间:2024/04/29 15:50
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);    }}
阅读全文
0 0
原创粉丝点击