zoukankan      html  css  js  c++  java
  • 剑指Offer——二叉树的下一个结点

    题目描述:

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


    分析:

    1. 如果该结点存在右子树,那么返回右子树的最左结点。
    2. 如果该结点不存在右子树,那么如果该结点不是其父结点的最右结点,那么返回父结点;
      否则一直找到最大子树的最右结点是该结点,那么返回该最大子树的根结点的父结点。


    代码:

     1 /*
     2 struct TreeLinkNode {
     3     int val;
     4     struct TreeLinkNode *left;
     5     struct TreeLinkNode *right;
     6     struct TreeLinkNode *next;
     7     TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
     8 
     9     }
    10 };
    11 */
    12 class Solution {
    13 public:
    14     TreeLinkNode* GetNext(TreeLinkNode* pNode) {
    15         if(pNode->right == NULL) {
    16             if(pNode->next == NULL) return NULL;
    17             TreeLinkNode* p1 = pNode;
    18             TreeLinkNode* p2 = pNode->next;
    19             while(p2 && p2->right == p1) {
    20                 p1 = p1->next;
    21                 p2 = p1->next;
    22             }
    23             if(p2) return p2;
    24             return NULL;
    25         }
    26         TreeLinkNode* nextNode = pNode->right;
    27         while(nextNode->left) {
    28             nextNode = nextNode->left;
    29         }
    30         return nextNode;
    31     }
    32 };
  • 相关阅读:
    storm学习途径
    Spark中的RDD操作简介
    【转】Hadoop web页面的授权设定
    源码安装ipython,并在ipython中整合spark
    Spark调优
    在Java中调用C
    查看Mysql表空间大小 优化空间
    update A inner join
    kibana 汉化
    xcode-select --install不能下载该软件的解决办法
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747792.html
Copyright © 2011-2022 走看看