首页 > 其他 > 详细

剑指Offer 26. 树的子结构

时间:2021-09-21 16:36:30      阅读:14      评论:0      收藏:0      [点我收藏+]

方法一 递归

若树B是树A的子结构,则子结构的根节点可能为树A的任意一个节点。因此,判断树B是否是树A的子结构,需要完成两步工作:

  • 先序遍历树A中的每个节点
  • 判断树A中的每个节点为根的子树是否包含B

特例:树A或树B为空时,返回false,此时不需要进行判断且可能会影响recur()的判断,直接返回false;isSubStructure()递归到最后时一定会反回false,但是上一层如果匹配则三个"||"中会返回true。

||有阻断作用。

 1 /**
 2  * Definition for a binary tree node.
 3  * function TreeNode(val) {
 4  *     this.val = val;
 5  *     this.left = this.right = null;
 6  * }
 7  */
 8 /**
 9  * @param {TreeNode} A
10  * @param {TreeNode} B
11  * @return {boolean}
12  */
13 var isSubStructure = function(A, B) {
14     if(A == null || B == null) return false;
15     return (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
16     //return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, b));
17 };
18 
19 const recur = (A, B) => {
20     if(B == null) { //B为空说明当前节点前面的节点已经匹配完毕
21         return true;
22     }
23     if(A == null || A.val != B.val) {//A为空说明B不为空
24         return false;
25     }
26     return recur(A.left, B.left) && recur(A.right, B.right);
27 }

 

剑指Offer 26. 树的子结构

原文:https://www.cnblogs.com/yukinon/p/15310465.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!