二叉树的最近公共祖先


思路

  1. 在左、右子树中分别查找是否包含p或q:
  2. 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先
  3. 如果左子树包含p和q,那么到root->left中继续查找,最近公共祖先在左子树里面
  4. 如果右子树包含p和q,那么到root->right中继续查找,最近公共祖先在右子树里面
 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root == nullptr || root == p || root == q){return root;}TreeNode* left = lowestCommonAncestor(root->left, p, q);TreeNode* right = lowestCommonAncestor(root->right, p, q);return left == nullptr ? right : (right == nullptr ? left : root);}
};

二叉树搜索树转换成排序双向链表


二叉搜索树:普通的二叉树

  1. 左子树所有结点小于根
  2. 右子树所有结点大于根
  3. 中序有序
Node *prev = NULL;
void func(Node *node){node->left = prev;    //等于上面的node->prev;if(prev != NULL){prev->right = node ; //等于上面的prev->next}prev = node;
}void inorder(Node *root){if(root == NULL)return ;inorder(root->left);func(root);inorder(root->right);
}
class Solution {public:TreeNode *prev = NULL;TreeNode *first ;void fun(TreeNode * node){node->left =prev;if(prev!=NULL){prev->right = node;}else{first = node;}prev =node;}void Inorder(TreeNode *root){if(root == NULL){return ;}Inorder(root->left);fun(root);Inorder(root->right);}TreeNode* Convert(TreeNode* pRootOfTree){first = NULL;Inorder(pRootOfTree);return first;}
};

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

  1. 求二叉树两个结点的最近公共祖先

    题目描述: 一颗二叉树按顺序存储结构进行存储,设计一个算法,求编号i和j的最近公共祖先 思路: 已知:二叉树.顺序存储 空的结点用"#"表示 如果i,j所在位置的结点数据不是&qu ...

  2. C语言二叉树的lowest common ancestor最低公共祖先(附完整源码)

    C语言二叉树的lowest common ancestor最低公共祖先 C语言二叉树的lowest common ancestor最低公共祖先完整源码(定义,实现,main函数测试) C语言二叉树的l ...

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

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

  4. 二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。

    树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树.二叉树的相关定义如下: typedef int DataType; typedef struct Node{DataTyp ...

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

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

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

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

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

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

  8. 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先

    [试题描述] 求二叉树中任意两个节点的最近公共祖先也称为LCA问题(Lowest Common Ancestor). 二叉查找树 如果该二叉树是二叉查找树,那么求解LCA十分简单. 基本思想为:从树根 ...

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

    二叉树相关习题 文章目录 二叉树相关习题 1. 检查两棵树是否相同 2. 判断一个树是否是另一个树的子树 3. 二叉树的最大深度 4. 判断一颗二叉树是否是平衡二叉树 5. 对称二叉树 6. 二叉树的 ...

最新文章

  1. Java 领域 offer 收割:程序员黄金 5 年进阶心得!
  2. zillow房价预测
  3. 关于layui-layer独立组件--弹出层
  4. 架构师口中的混沌工程,究竟用来解决什么问题
  5. javascript与xml实例应用
  6. Almost Arithmetic Progression
  7. mysql 分析查询语句,MySQL教程之SQL语句分析查询优化
  8. QTcpSever和QTcpSocket实现多线程客户端和服务端;
  9. 从客户端(content=span class=Apple-s...)中检测到有潜在危险的 Request.Form 值。
  10. 镁光固态硬盘用什么软件测试寿命,最简单的方法:如何查看SSD可以使用多长时间?固态硬盘寿命测试方法[详细]...
  11. [C++] CreateThread() 与 _beginthread() 的区别
  12. 影响力最大化算法——degreediscount以及python实现代码
  13. ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information
  14. 《计算机网络》——IEEE 802.11 无线局域网、无线局域网的分类、广域网、PPP协议、HDLC协议、链路层设备、冲突域和广播域
  15. 《慢慢来,一切都来得及》语录
  16. OC内存管理常见面试题整理
  17. matlab制作天体运动动画,天体运动 动态演示
  18. JS中获取元素的方法
  19. OpenCV学习:基础图像操作 (四):绘制几何图形
  20. 什么是cdn节点和cdn节点服务器?

热门文章

  1. .Net Core Swagger:Actions require an explicit HttpMethod binding for Swagger 2.0
  2. 【链接】Linux C/C++ 学习路线-已拿腾讯、百度 offer
  3. Dumb Bones UVA - 10529(概率dp)
  4. mysql--------四种索引类型
  5. C语言程序设计预报作业
  6. Java中多线程的使用!!
  7. 图像二维离散傅里叶变换、幅度谱、相位谱
  8. TextView实现自动滚动滚动.
  9. java连接oracle数据库 -- jdbc连接
  10. 使用PHP创建一个REST API(Create a REST API with PHP)