zoukankan      html  css  js  c++  java
  • [剑指offer] 二叉树的下一个节点

    不容易一次写对的题,对指针的操作要细心。

    /*
    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 == NULL) {
                return NULL;
            }
            
            // 如果pNode有右子树,就找右子树的最左下方的节点
            if (pNode->right != NULL) {
                TreeLinkNode* next = pNode->right;
                while (next->left != NULL) {
                    next = next->left;
                }
                return next;
            }
            
            // pNode无右子树,无父节点,返回NULL
            if (pNode->next == NULL) {
                return NULL;
            }
            
            // pNode无右子树,但是pNode是父节点的左孩子,就返回父节点
            if (pNode == pNode->next->left) {
                return pNode->next;
            }
            
            // pNode无右子树,是父节点的右孩子,就一直往上找,直到找到一个节点是其父节点的左孩子,返回该节点的父节点
            TreeLinkNode* cur = pNode;
            while (cur->next != NULL && cur != cur->next->left) {
                cur = cur->next;
            }
            return cur->next;
        }
    };
    
  • 相关阅读:
    SDOI2017遗忘的集合
    菜鸡的考场emacs配置
    SDOI2017苹果树
    SDOI2017硬币游戏
    都11点了为什么还没有人阿克离场
    TJOI2013数字根
    HNOI2018毒瘤
    闵可夫斯基和
    三维凸包学习小记
    灭绝树学习小记
  • 原文地址:https://www.cnblogs.com/ilovezyg/p/7589102.html
Copyright © 2011-2022 走看看