• 剑指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其实是同一种情况。同理,对于前序和后序的下一个节点也可如此分析。

  • 相关阅读:
    tp6.0使用EasyWeChat
    vue-admin-template使用
    tp6.0入门
    seo一些细节
    wordpress开发mac
    php加密
    小程序信息授权sessionKey失效问题
    app爬虫(python)开发——抓包工具的使用详细笔记
    app爬虫(python)开发——搭建开发环境(如何抓取app数据?)
    app爬虫(python)开发入门到实战个人笔记(目录)
  • 原文地址:https://www.cnblogs.com/parzulpan/p/11258227.html
Copyright © 2020-2023  润新知