二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表
二叉树的最近公共祖先
思路
- 在左、右子树中分别查找是否包含p或q:
- 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先
- 如果左子树包含p和q,那么到root->left中继续查找,最近公共祖先在左子树里面
- 如果右子树包含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);}
};
二叉树搜索树转换成排序双向链表
二叉搜索树:普通的二叉树
- 左子树所有结点小于根
- 右子树所有结点大于根
- 中序有序
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 二叉树搜索树转换成排序双向链表相关推荐
- 求二叉树两个结点的最近公共祖先
题目描述: 一颗二叉树按顺序存储结构进行存储,设计一个算法,求编号i和j的最近公共祖先 思路: 已知:二叉树.顺序存储 空的结点用"#"表示 如果i,j所在位置的结点数据不是&qu ...
- C语言二叉树的lowest common ancestor最低公共祖先(附完整源码)
C语言二叉树的lowest common ancestor最低公共祖先 C语言二叉树的lowest common ancestor最低公共祖先完整源码(定义,实现,main函数测试) C语言二叉树的l ...
- 二叉搜索树的公共祖先,二叉树的最近公共祖先
二叉树的定义: # Definition for a binary tree node. class TreeNode:def __init__(self, x):self.val = xself.l ...
- 二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。
树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树.二叉树的相关定义如下: typedef int DataType; typedef struct Node{DataTyp ...
- 二叉搜索树的最近公共祖先、二叉树的最近公共祖先
目录 二叉搜索树的最近公共祖先(力扣:235) 二叉树的最近公共祖先(力扣:236) 二叉搜索树的最近公共祖先 题目 二叉搜索树的最近公共祖先(力扣:235) 给定一个二叉搜索树, 找到该树中两个指定 ...
- 由浅入深:求给定两个树节点的最低公共祖先(二叉树、普通树结构)JAVA实现
最近看了一道面试题目,觉得很有意思,而且常常被问到,今天综合归纳了一下这道题目,并给出了各种变形题目,附上JAVA版的程序解答. 题目是这样的:寻找二叉树的最低公共祖先?(其中隐含着一个盲点:树是什么 ...
- C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)
目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
[试题描述] 求二叉树中任意两个节点的最近公共祖先也称为LCA问题(Lowest Common Ancestor). 二叉查找树 如果该二叉树是二叉查找树,那么求解LCA十分简单. 基本思想为:从树根 ...
- 【二叉树相关习题】二叉树最大深度;平衡二叉树;最近公共祖先;对称二叉树;
二叉树相关习题 文章目录 二叉树相关习题 1. 检查两棵树是否相同 2. 判断一个树是否是另一个树的子树 3. 二叉树的最大深度 4. 判断一颗二叉树是否是平衡二叉树 5. 对称二叉树 6. 二叉树的 ...
最新文章
- Java 领域 offer 收割:程序员黄金 5 年进阶心得!
- zillow房价预测
- 关于layui-layer独立组件--弹出层
- 架构师口中的混沌工程,究竟用来解决什么问题
- javascript与xml实例应用
- Almost Arithmetic Progression
- mysql 分析查询语句,MySQL教程之SQL语句分析查询优化
- QTcpSever和QTcpSocket实现多线程客户端和服务端;
- 从客户端(content=span class=Apple-s...)中检测到有潜在危险的 Request.Form 值。
- 镁光固态硬盘用什么软件测试寿命,最简单的方法:如何查看SSD可以使用多长时间?固态硬盘寿命测试方法[详细]...
- [C++] CreateThread() 与 _beginthread() 的区别
- 影响力最大化算法——degreediscount以及python实现代码
- ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information
- 《计算机网络》——IEEE 802.11 无线局域网、无线局域网的分类、广域网、PPP协议、HDLC协议、链路层设备、冲突域和广播域
- 《慢慢来,一切都来得及》语录
- OC内存管理常见面试题整理
- matlab制作天体运动动画,天体运动 动态演示
- JS中获取元素的方法
- OpenCV学习:基础图像操作 (四):绘制几何图形
- 什么是cdn节点和cdn节点服务器?
热门文章
- .Net Core Swagger:Actions require an explicit HttpMethod binding for Swagger 2.0
- 【链接】Linux C/C++ 学习路线-已拿腾讯、百度 offer
- Dumb Bones UVA - 10529(概率dp)
- mysql--------四种索引类型
- C语言程序设计预报作业
- Java中多线程的使用!!
- 图像二维离散傅里叶变换、幅度谱、相位谱
- TextView实现自动滚动滚动.
- java连接oracle数据库 -- jdbc连接
- 使用PHP创建一个REST API(Create a REST API with PHP)