码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer:树的子结构

时间:2020-03-06 23:37:49      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:treenode   左右子树   block   lse   boolean   树遍历   输入   code   树的子结构   

题目描述

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

解题思路

  • 递归思想,如果根节点相同则递归调用match(),如果根节点不相同,则判断root1的左子树或右子树与root2是否相同。

  • 注意节点为空的条件,HasSubtree中,只要有一棵树树为空就返回false; match中,要先判断root2,如果root2为空,则说明第二棵树遍历完了,即匹配成功。

    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        //有一棵树为空,返回false
            if(root1 == null || root2 == null){
                return false;
            }
            return match(root1, root2) ||   //两棵树根节点相同
                   HasSubtree(root1.left, root2) || //root1的左子树与root2比较
                   HasSubtree(root1.right, root2);  //root1的右子树与root2比较
        }
        public boolean match(TreeNode root1,TreeNode root2){
           //要先判断root2,root2为空说明遍历结束,匹配成功       
            if(root2 == null) return true;
            //root2不为null,root1为null,root2还没完全匹配,root1已经遍历结束
            if(root1 == null) return false;
            //两个节点的value相同,比较左右子树是否都相同
            if(root1.val == root2.val){
                return match(root1.left,root2.left) && match(root1.right,root2.right);
            }else{
                return false; 
            }

        }

剑指offer:树的子结构

标签:treenode   左右子树   block   lse   boolean   树遍历   输入   code   树的子结构   

原文地址:https://www.cnblogs.com/le-le/p/12431626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!