树的子结构(判断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