二叉树相关问题

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;
    
;

 

以上是关于二叉树相关问题的主要内容,如果未能解决你的问题,请参考以下文章

寻找二叉树两个节点的最低公共祖先

二叉树的相关定义及实现

236. 二叉树的最近公共祖先[中等]

二叉树有关习题整理145二叉树的后序遍历 94二叉树的中序遍历 572另一棵树的子树 236二叉树的最近公共祖先 JZ36二叉搜索树与双向链表 - 牛客

236-二叉树的最近公共祖先

寻找二叉树中的最低公共祖先结点----LCA(Lowest Common Ancestor )问题(递归)