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

    题目:二叉树的下一个结点

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

     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     {
    16         
    17     }
    18 };

    解题代码:

     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 == NULL)
    16             return NULL;
    17         TreeLinkNode* res = NULL;
    18         TreeLinkNode* pCurrent = NULL;
    19 
    20         // 若右子树不为空,则右子树的最左节点即为指定节点的下一个节点
    21         if(pNode->right != NULL){
    22              pCurrent = pNode->right;
    23             while(pCurrent->left != NULL){
    24                 pCurrent = pCurrent->left;
    25             }
    26             res = pCurrent;
    27         }
    28         // 若右子树为空,且该节点为父节点的左子节点
    29         else if(pNode->right == NULL && pNode->next != NULL && pNode->next->left == pNode){
    30             res = pNode->next;
    31         }
    32         // 若右子树为空,且该节点为父节点的右子节点
    33         else if(pNode->right == NULL && pNode->next != NULL && pNode->next->right == pNode){
    34             pCurrent = pNode->next;
    35             while(pCurrent->next != NULL && pCurrent->next->right == pCurrent)
    36                 pCurrent = pCurrent->next;
    37             res = pCurrent->next;
    38         }
    39         // 若右子树为空,且该节点根节点
    40         else if(pNode->right == NULL && pNode->next == NULL)
    41             return NULL;
    42         return res;
    43     }
    44 };
  • 相关阅读:
    一个先进的App框架:使用Ionic创建一个简单的APP
    Hexo NexT 博客本地搭建指南
    Spring Boot 2.0 入门指南
    1. 初识 Lucene
    Spring Framework 简介
    电脑软件推荐安装列表
    PHP 环境搭建篇
    C++ STL 容器之栈的使用
    0x02 译文:Windows桌面应用Win32第一个程序
    反射?切面?怎样对公共参数及行为进行封装
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/9829012.html
Copyright © 2011-2022 走看看