zoukankan      html  css  js  c++  java
  • 剑指offer 面试题8:二叉树的下一个节点

    题目描述

    给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

    编程思想

    根据中序遍历的特点:左根右。可分为三种情况:1. 一个节点有右子树,那么它的下一个节点就是它的右子树的最左子节点。2.  一个节点没有右子树它还是它父节点的左子节点,那么它的下一个节点就是它的父节点。3.  一个节点没有右子树它还是它父节点的右子节点,那么它的下一个节点就是含有左子节点的祖先节点。

    编程实现

    /*
    struct TreeLinkNode {
        int val;
        struct TreeLinkNode *left;
        struct TreeLinkNode *right;
        struct TreeLinkNode *next;    //它的父节点
        TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
            
        }
    };
    */
    class Solution {
    public:
        TreeLinkNode* GetNext(TreeLinkNode* pNode)
        {
            if(pNode == nullptr)
                return nullptr;
            // 情况1
            if(pNode->right != nullptr)
            {
                pNode = pNode->right;
                while(pNode->left != nullptr)
                {
                    pNode = pNode->left;
                }
                return pNode;
            }
            // 情况2和3
            while(pNode->next != nullptr)
            {
                // 节点的父节点
                TreeLinkNode* pRoot = pNode->next;
                if(pRoot->left == pNode)    //情况2
                {
                    return pRoot;
                }
                //情况3,继续找它的父节点
                pNode = pNode->next;
            }
            return nullptr;
        }
    };

    题目总结

    细细分析可知,情况2和3其实是同一种情况。同理,对于前序和后序的下一个节点也可如此分析。

  • 相关阅读:
    Python 重定向 响应头
    经典案例:如何优化Oracle使用DBlink的SQL语句
    django 文件上传
    mysite下的url 映射到news下的视图
    django 只允许POST或者GET
    云端的SRE发展与实践
    django 捕获url
    django 在自己app下编写自定义sql
    对偶学习及其在机器翻译中的应用
    对偶学习及其在机器翻译中的应用
  • 原文地址:https://www.cnblogs.com/parzulpan/p/11258227.html
Copyright © 2011-2022 走看看