其他分享
首页 > 其他分享> > 树的子结构(判断B是否为A的子树)

树的子结构(判断B是否为A的子树)

作者:互联网

https://leetcode.cn/problems/shu-de-zi-jie-gou-lcof/

 

 

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 //思路:
 //1、递归A树,找到比较B树的入口节点
 //2、从入口节点开始,同时递归和比较AB树的值
 //3、如果A树先递归完,或者比较不相等,则返回false

func isSubStructure(A *TreeNode, B *TreeNode) bool {
    if A==nil||B==nil{
        return false
    }
    if A.Val==B.Val&&check(A.Left,B.Left)&&check(A.Right,B.Right){
        return true
    }
    return isSubStructure(A.Left,B)||isSubStructure(A.Right,B)
}
func check(A,B *TreeNode) bool{
    if B==nil{
        return true
    }
    if A==nil{
        return false
    }
    if A.Val==B.Val{
        return check(A.Left,B.Left)&&check(A.Right,B.Right)
    }else{
        return false
    }
}

//建一棵树
func insert(root *TreeNode,x int){
    if root==nil{
        tmp:=&TreeNode{
            Val:x,
        }
        return tmp
    }
    if x<=root.Val{//这里是按照先序遍历的方式建立二叉树,如果要层序遍历的方式建立二叉树的话,需要根据索引的奇偶做判断
        root.Left=insert(root.Left,x)
    }else{
        root.Right=insert(root.Right,x)
    }
    return root
}

 

标签:子树,TreeNode,Val,子结构,Right,判断,return,check,Left
来源: https://www.cnblogs.com/-citywall123/p/16418722.html