二叉树相关习题

文章目录

  • 二叉树相关习题
    • 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);}
}
//二叉搜索树,中序遍历是有序的,

【二叉树相关习题】二叉树最大深度;平衡二叉树;最近公共祖先;对称二叉树;相关推荐

  1. C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)

    目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...

  2. 寻找二叉树中两个结点的最近公共祖先

    寻找二叉树中两个结点的最近公共祖先(这两个结点一定在树中) 对于二叉树中两个结点的最近公共祖先来说 ,这两个结点分别在自己的左子树和右子树中,所以要寻找二叉树中两个结点的最近公共祖先可以: 从根结点开 ...

  3. 信息学奥赛一本通 1981:【18NOIP普及组】对称二叉树 | 洛谷 P5018【NOIP2018 普及组】 对称二叉树

    [题目链接] ybt 1981:[18NOIP普及组]对称二叉树 洛谷 P5018[NOIP2018 普及组] 对称二叉树 [题目考点] 二叉树 [解题思路] 先求出二叉树中各子树的结点数 遍历二叉树 ...

  4. 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表

    二叉树的最近公共祖先 思路 在左.右子树中分别查找是否包含p或q: 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先 如果左子树包含p和q, ...

  5. 二叉搜索树的公共祖先,二叉树的最近公共祖先

    二叉树的定义: # Definition for a binary tree node. class TreeNode:def __init__(self, x):self.val = xself.l ...

  6. 二叉搜索树的最近公共祖先、二叉树的最近公共祖先

    目录 二叉搜索树的最近公共祖先(力扣:235) 二叉树的最近公共祖先(力扣:236) 二叉搜索树的最近公共祖先 题目 二叉搜索树的最近公共祖先(力扣:235) 给定一个二叉搜索树, 找到该树中两个指定 ...

  7. 由浅入深:求给定两个树节点的最低公共祖先(二叉树、普通树结构)JAVA实现

    最近看了一道面试题目,觉得很有意思,而且常常被问到,今天综合归纳了一下这道题目,并给出了各种变形题目,附上JAVA版的程序解答. 题目是这样的:寻找二叉树的最低公共祖先?(其中隐含着一个盲点:树是什么 ...

  8. 二叉树找到两个结点的最近公共祖先

    面试题68 - I. 二叉搜索树的最近公共祖先 https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu- ...

  9. 二叉树——求两个节点的最近公共祖先

    题目 给定一颗二叉树的头结点,和这颗二叉树中2个节点n1和n2,求这两个节点的最近公共祖先: 思路 利用后序遍历实现: 对于当前节点cur,如果节点为null或者等于n1或n2中的一个,则直接返回cu ...

最新文章

  1. 详解GPU的内存带宽与CPU的不同
  2. python发声-python3-声音处理
  3. Fedora 32 因 Bug 将推迟发布
  4. mysql统计各年龄段的数量
  5. Sybase数据库在UNIX、Windows上的实施和管理 出版预告
  6. Android 监听耳机的插拔事件
  7. 用FileZilla Server搭建ftp服务器
  8. 创建精简的SharePoint页面
  9. 344.Reverse String
  10. linux centos 架构,CentOS Linux 7.5 (build 1804) 现可用于IBM POWER9体系架构
  11. 武汉大学计算机网络安全学院,消息︱武汉大学计算机学院(新)与国家网络安全学院正式组建...
  12. selenium自动化入门之实现163邮箱发送邮件
  13. MVC5局部视图的调用
  14. Android面试分析一:关于OKhttp详解(附带视频教程,flutter游戏全屏
  15. css小游戏,js小游戏,Flex Box青蛙、冒险游戏、设计模式游戏等
  16. 读《我不喜欢这世界,我只喜欢你》有感
  17. HTML5纯css实现爱心动画效果DW、vscode来自程序员的浪漫表白
  18. 数据库的增删查改(全部重点知识一篇整合,包括数据库查询的进阶内容)
  19. 汇川plc可以用C语言吗,汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解...
  20. Django-13:django中间件

热门文章

  1. linux安装MySQL的可视化管理工具
  2. ERP中生产计划的分类(转)
  3. 前端的核心技术有哪些?
  4. 规划咨询服务先行示范——2021深城交典型项目盘点
  5. 基于mind+实时模式实现语音对讲功能
  6. active英语怎么读音_active用英语怎么读
  7. 长风破浪会有时,直挂云帆济沧海
  8. 清华大学计算机考研机试KY2 成绩排序
  9. 计算机辅助教学是人工智能应用,人工智能教学论文,关于人工智能存计算机辅助教学中应用相关参考文献资料-免费论文范文...
  10. 细读Autoformer—空间计量分析