树的子结构—递归、Java
来源:互联网 发布:java编程需要哪些软件 编辑:程序博客网 时间:2024/06/01 10:44
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
主要思路:
(1)在tree1中寻找tree2的根节点,如果找到了,就接着往下匹配左右节点,如果没有找到,就直接返回false,表示匹配失败;
(2)加入tree1的某个节点和tree2的根节点相等,但是左右子树并不相同,并不能说明tree2就不是tree1的子结构,应该继续往下寻找;
如上图所示,根节点1相同,但是左右子树并不相同,此时并不能说tree2不是tree1的子机构,因为在tree1的左子树中包含tree2这个结构。
思想比较简答,但是这个题感觉考得是代码的完整性和健壮性,就是对边界的判断。
主要考虑:
一、在寻找相同的根节点时:
(1)两颗树为空,直接返回false;
(2)任意一棵树为空,直接返回false;
(3)两棵树都不为空:
3.1 节点值相等,则判断节点之外的子结构;
3.2 节点值不相等,那么用tree1的当前节点的左孩子与tree2的根节点匹配;
3.3 tree1的当前节点的左孩子与tree2的根节点值不相等,用tree1的当前节点的右孩子与tree2的根节点匹配。
二、判断tree2是不是tree1的子结构
(1)tree1为空,tree2不为空,直接返回false,因为tree1的树的结构是大于等于tree2的;
(2)如果tree2为空,说明递归完成,之前的匹配都成功,直接返回true
(3)节点的值不相等,返回false。
综上分析,代码如下:
/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean result = false; // 判断两个树是不是空 if(root1 != null && root2 != null){ // 如果两个数都不为空,就进行A树的遍历,寻找和B树根节点相同的节点 if(root1.val == root2.val){ result = DoseTree1HaveTree2(root1,root2); } // 如果跟节点不相等,则判断左子树和右子树 if(!result){ result = HasSubtree(root1.left,root2); } if(!result){ result = HasSubtree(root1.right,root2); } } return result; } private boolean DoseTree1HaveTree2(TreeNode tree1,TreeNode tree2){ if(tree1 == null && tree2 != null) return false; if(tree2 == null) return true; if(tree1.val != tree2.val) return false; return DoseTree1HaveTree2(tree1.left,tree2.left) && DoseTree1HaveTree2(tree1.right,tree2.right); }}
0 0
- 树的子结构—递归、Java
- 树的子结构(剑指offer)递归
- java 递归树结构
- java递归实现json树结构,附带js实现树结构:子父节点
- java之树的子结构
- 树的子结构(Java实现)
- 树的子结构(java版)
- 牛客网-树的子结构(java)
- 树的子结构java实现
- 递归删除树形结构的所有子节点(java和mysql实现)
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- C# 网络操作相关类
- Glide缓存
- BrocastReceiver(一)
- ORA-12560 TNS 协议适配器错误
- quartz配置发布定时任务(二)
- 树的子结构—递归、Java
- python GUI编程(Tkinter)简单使用
- viewport理解
- 金典——碰撞的蚂蚁
- LeetCode Algorithms 33. Search in Rotated Sorted Array
- json 基础demo
- C# ADSL重新连接、拨号
- 解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
- Angular2.0视频教程来了!(视频和PPT的链接都在底部)