二叉树相关问题
Posted Moua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树相关问题相关的知识,希望对你有一定的参考价值。
二叉树的最近公共祖先节点
class Solution
public:
//前序遍历二叉树
bool prevOrder(TreeNode* root,TreeNode* x,stack<TreeNode*>& path)
if(root == nullptr)
return false;
//根节点入栈
path.push(root);
if(root == x)
return true;
//左子树或者右子树中找
if(prevOrder(root->left,x,path) || prevOrder(root->right,x,path))
return true;
else
path.pop();
return false;
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
//遍历二叉树,对于二叉树中的某个节点如果p和q一个属于该节点的左孩子节点一个属于该节点的右孩子节点,则该节点就是最近公共祖先节点
//找出两个节点在二叉树中的路径(从根节点开始)
stack<TreeNode*> pPath;
stack<TreeNode*> qPath;
prevOrder(root,p,pPath);
prevOrder(root,q,qPath);
int pSize = pPath.size();
int qSize = qPath.size();
if(pSize > qSize)
while(pSize != qSize)
pPath.pop();
pSize--;
else
while(pSize != qSize)
qPath.pop();
qSize--;
//同时出,直到相同
while(pPath.top() != qPath.top())
pPath.pop();
qPath.pop();
return pPath.top();
;
二叉搜索树与双向链表
class Solution
public:
void _Convert(TreeNode* root,TreeNode*& prev)
if(root == nullptr)
return;
_Convert(root->left, prev);
root->left = prev;
if(prev)
prev->right = root;
prev = root;
_Convert(root->right, prev);
TreeNode* Convert(TreeNode* pRootOfTree)
if(pRootOfTree == nullptr)
return nullptr;
//left指针指向前一个节点,right指针指向后一个节点
TreeNode* prev = nullptr;
_Convert(pRootOfTree, prev);
//找头结点
TreeNode* head = pRootOfTree;
while(head->left)
head = head->left;
return head;
;
以上是关于二叉树相关问题的主要内容,如果未能解决你的问题,请参考以下文章
二叉树有关习题整理145二叉树的后序遍历 94二叉树的中序遍历 572另一棵树的子树 236二叉树的最近公共祖先 JZ36二叉搜索树与双向链表 - 牛客