ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-28 11:00:34  阅读:146  来源: 互联网

标签:子树 TreeNode Val 子结构 Right 判断 return check Left


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有