
【数据结构系列】——二叉树的操作集合
比较根节点:首先检查两棵二叉树的根节点是否相等。如果不相等,则直接返回false。 递归比较:如果根节点相等,则递归比较左右子树是否相等。 检查子树位置:如果根节点不相等,则检查其中一棵二叭树的左子树或右子树是否与另一棵二叉树相等。 交换左右节点:首先交换根节点的左右子树。 递归镜像:然后递归镜像处理左右子树。
发布日期:2021-05-07 21:21:36
浏览次数:80
分类:精选文章
本文共 1724 字,大约阅读时间需要 5 分钟。
二叉树及其相关问题
二叉树的遍历
在编程中,二叉树的遍历是常见操作之一。我们可以通过递归方法实现对二叉树的遍历。以下是一个示例函数:
void traverse(TreeNode root) { // 递归遍历二叉树 if (root == null) { return; } traverse(root.left); // 先遍历左子树 traverse(root.right); // 再遍历右子树}
这个函数的作用是按前序方式(先左后右)遍历二叉树。根节点会先被访问,然后是其左子树,最后是右子树。
检查两棵二叉树是否是子树关系
我们可以通过递归的方法来判断两棵二叉树是否是子树关系。以下是实现思路:
以下是实现代码:
public boolean hasSubtree(TreeNode root1, TreeNode root2) { if (root2 == null) { return true; // 如果root2为空,root1也是子树 } if (root1 == null) { return false; // root1为空,root2不可能是其子树 } // 检查root2是否是root1的子树 if (hasSubtree(root1, root2)) { return true; } // 检查root2是否在root1的左子树或右子树中 return hasSubtree(root1.left, root2) || hasSubtree(root1.right, root2);}private boolean hasSubtree(TreeNode root1, TreeNode root2) { if (root1 == null && root2 == null) { return true; // 两个节点都为空,满足子树条件 } if (root1 == null || root2 == null) { return false; // 至少有一个为空,不是子树 } // 递归检查左子树和右子树 return hasSubtree(root1.left, root2.left) && hasSubtree(root1.right, root2.right);}
这个方法的时间复杂度为O(n1),其中n1是较大二叉树的节点数。
二叉树的镜像
镜像二叉树意味着交换节点的左右子树。以下是实现思路:
以下是实现代码:
public TreeNode mirror(TreeNode pRoot) { if (pRoot == null) { return null; } // 交换左右节点 TreeNode temp = pRoot.left; pRoot.left = pRoot.right; pRoot.right = temp; // 递归镜像左子树 if (pRoot.left != null) { mirror(pRoot.left); } // 递归镜像右子树 if (pRoot.right != null) { mirror(pRoot.right); } return pRoot;}
通过这种方法,我们可以将给定的二叉树镜像反转。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月20日 22时57分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
趣谈win10常用快捷键
2019-03-04
11.2.6 时间值的小数秒
2019-03-05
Redis源码分析(七)--- zipmap压缩图
2019-03-05
【MySQL】(九)触发器
2019-03-05
Oracle 11G环境配置
2019-03-05
【Python】(十二)IO 文件处理
2019-03-05
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
2019-03-05
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
2019-03-05
C语言的数值溢出问题(上)
2019-03-05
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2019-03-05
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2019-03-05
android:使用audiotrack 类播放wav文件
2019-03-05
聊聊我的五一小假期
2019-03-05
数据库三个级别封锁协议
2019-03-05
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2019-03-05
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2019-03-05
SLAM学习笔记-求解视觉SLAM问题
2019-03-05
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
2019-03-05