【二叉树相关习题】二叉树最大深度;平衡二叉树;最近公共祖先;对称二叉树;
二叉树相关习题
文章目录
- 二叉树相关习题
- 1. 检查两棵树是否相同
- 2. 判断一个树是否是另一个树的子树
- 3. 二叉树的最大深度
- 4. 判断一颗二叉树是否是平衡二叉树
- 5. 对称二叉树
- 6. 二叉树的最近公共祖先
- 7. 二叉搜索树与双向链表
1. 检查两棵树是否相同
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(p == null && q == null){return true;}if(p == null || q == null){return false;}if(p.val != q.val){return false;}return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);}
}
//如果两个树都为空返回true,有一个树为空,则不相同,
//都不为空,则判断两个树的根节点是否相同,递归判断两个树的左节点和右节点
2. 判断一个树是否是另一个树的子树
class Solution {public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(root == null || subRoot == null){return false;}if(isSameTree(root,subRoot)){return true;}if(isSubtree(root.left,subRoot)){return true;}if(isSubtree(root.right,subRoot)){return true;}return false;}public boolean isSameTree(TreeNode root,TreeNode subRoot){if(root == null && subRoot == null){return true;}if(root == null || subRoot == null){return false;}if(root.val != subRoot.val){return false;}return isSameTree(root.left,subRoot.left)&&isSameTree(root.right,subRoot.right);}
}
//先判断两个树是否相同,再递归判断一个树是否是另一个树的左子树或右子树
3. 二叉树的最大深度
class Solution {public int maxDepth(TreeNode root) {if(root == null){return 0;}int leftMax = maxDepth(root.left);int rightMax = maxDepth(root.right);return (leftMax > rightMax)?leftMax +1 : rightMax+1;}
}
//最大深度就是这个树的高度
4. 判断一颗二叉树是否是平衡二叉树
class Solution {public boolean isBalanced(TreeNode root) {if(root == null){return true;}int leftHeight = maxDepth(root.left);int rightHeight = maxDepth(root.right);//一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1return Math.abs(leftHeight - rightHeight)<2 && isBalanced(root.left) && isBalanced(root.right);}public int maxDepth(TreeNode root){if(root == null){return 0;}int leftMax = maxDepth(root.left);int rightMax = maxDepth(root.right);return (leftMax > rightMax)? leftMax+1 : rightMax +1;}
}//先求出一个二叉树左右子树的高度,判断两者之差是否小于2,再递归判断左子树和右子树
5. 对称二叉树
class Solution {public boolean isSymmetric(TreeNode root) {if(root == null){return true;}return isSymmetricChild(root.left,root.right);}public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree){if(leftTree ==null && rightTree == null){return true;}if(leftTree == null || rightTree == null){return false;}if(leftTree.val != rightTree.val){return false;}//递归判断左子树的左和右子树的右,左子树的右和右子树的左return isSymmetricChild(leftTree.left,rightTree.right) && isSymmetricChild(leftTree.right,rightTree.left);}
}
6. 二叉树的最近公共祖先
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null){return null;}//如果 q 或者 p 是root, 则root就是最近的公共祖先if(q == root || p == root){return root;}//不是root。 则去root的左树和右数去找TreeNode leftTree = lowestCommonAncestor(root.left,q,p);TreeNode rightTree = lowestCommonAncestor(root.right,q,p);//如果左树和右树都找到了,说明root是最近公共祖先if(leftTree != null && rightTree != null){return root;}//如果左树找到了 右树没找到 说明左树找到的这个节点就是公共祖先if(leftTree != null){return leftTree;}//如果右树找到了 左树没找到, 说明右树找到的这个节点 就是公共祖先if(rightTree != null){return rightTree;}return null;}
}
7. 二叉搜索树与双向链表
public class Solution {public TreeNode Convert(TreeNode pRootOfTree) {if(pRootOfTree == null){return null;}ConvertChild(pRootOfTree);TreeNode tmp = pRootOfTree;while(tmp.left != null){tmp = tmp.left;}return tmp;}static TreeNode prev = null;public void ConvertChild(TreeNode pCur) {if(pCur == null){return;}ConvertChild(pCur.left);pCur.left = prev;if(prev != null){prev.right = pCur;}prev = pCur;ConvertChild(pCur.right);}
}
//二叉搜索树,中序遍历是有序的,
【二叉树相关习题】二叉树最大深度;平衡二叉树;最近公共祖先;对称二叉树;相关推荐
- C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)
目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...
- 寻找二叉树中两个结点的最近公共祖先
寻找二叉树中两个结点的最近公共祖先(这两个结点一定在树中) 对于二叉树中两个结点的最近公共祖先来说 ,这两个结点分别在自己的左子树和右子树中,所以要寻找二叉树中两个结点的最近公共祖先可以: 从根结点开 ...
- 信息学奥赛一本通 1981:【18NOIP普及组】对称二叉树 | 洛谷 P5018【NOIP2018 普及组】 对称二叉树
[题目链接] ybt 1981:[18NOIP普及组]对称二叉树 洛谷 P5018[NOIP2018 普及组] 对称二叉树 [题目考点] 二叉树 [解题思路] 先求出二叉树中各子树的结点数 遍历二叉树 ...
- 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表
二叉树的最近公共祖先 思路 在左.右子树中分别查找是否包含p或q: 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先 如果左子树包含p和q, ...
- 二叉搜索树的公共祖先,二叉树的最近公共祖先
二叉树的定义: # Definition for a binary tree node. class TreeNode:def __init__(self, x):self.val = xself.l ...
- 二叉搜索树的最近公共祖先、二叉树的最近公共祖先
目录 二叉搜索树的最近公共祖先(力扣:235) 二叉树的最近公共祖先(力扣:236) 二叉搜索树的最近公共祖先 题目 二叉搜索树的最近公共祖先(力扣:235) 给定一个二叉搜索树, 找到该树中两个指定 ...
- 由浅入深:求给定两个树节点的最低公共祖先(二叉树、普通树结构)JAVA实现
最近看了一道面试题目,觉得很有意思,而且常常被问到,今天综合归纳了一下这道题目,并给出了各种变形题目,附上JAVA版的程序解答. 题目是这样的:寻找二叉树的最低公共祖先?(其中隐含着一个盲点:树是什么 ...
- 二叉树找到两个结点的最近公共祖先
面试题68 - I. 二叉搜索树的最近公共祖先 https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu- ...
- 二叉树——求两个节点的最近公共祖先
题目 给定一颗二叉树的头结点,和这颗二叉树中2个节点n1和n2,求这两个节点的最近公共祖先: 思路 利用后序遍历实现: 对于当前节点cur,如果节点为null或者等于n1或n2中的一个,则直接返回cu ...
最新文章
- 详解GPU的内存带宽与CPU的不同
- python发声-python3-声音处理
- Fedora 32 因 Bug 将推迟发布
- mysql统计各年龄段的数量
- Sybase数据库在UNIX、Windows上的实施和管理 出版预告
- Android 监听耳机的插拔事件
- 用FileZilla Server搭建ftp服务器
- 创建精简的SharePoint页面
- 344.Reverse String
- linux centos 架构,CentOS Linux 7.5 (build 1804) 现可用于IBM POWER9体系架构
- 武汉大学计算机网络安全学院,消息︱武汉大学计算机学院(新)与国家网络安全学院正式组建...
- selenium自动化入门之实现163邮箱发送邮件
- MVC5局部视图的调用
- Android面试分析一:关于OKhttp详解(附带视频教程,flutter游戏全屏
- css小游戏,js小游戏,Flex Box青蛙、冒险游戏、设计模式游戏等
- 读《我不喜欢这世界,我只喜欢你》有感
- HTML5纯css实现爱心动画效果DW、vscode来自程序员的浪漫表白
- 数据库的增删查改(全部重点知识一篇整合,包括数据库查询的进阶内容)
- 汇川plc可以用C语言吗,汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解...
- Django-13:django中间件