• 二叉树的下一个结点


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

    思路:分三种情况:

    (1)当前结点有右子树,则其下一个结点就是右子树中的最左子结点;

    (2)当前结点是其父结点的左子结点,则下一个为其父结点;

    (3)当前结点既不是右子树,也不是是其父结点的左子结点,则沿着指向父结点的指针一直向上遍历,直到找到一个是它父结点的左子结点的结点,若存在,则这个结点的父结点是我们要找的下一个结点,若不存在,则没有。

    代码如下:

     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         if(pNode==nullptr)
    17             return nullptr;
    18         
    19         if(pNode->right !=nullptr)
    20         {
    21             pNode=pNode->right;
    22             while(pNode->left !=nullptr)
    23             {
    24                 pNode=pNode->left;
    25             }
    26             return pNode;
    27         }
    28         
    29         while(pNode->next !=nullptr)
    30         {
    31             TreeLinkNode *pFather=pNode->next;
    32             if(pFather->left==pNode)
    33                 return pFather;
    34             pNode=pNode->next;
    35         }
    36         return nullptr; 
    37     }
    38 };

    可以画图理解。

  • 相关阅读:
    python dict 与json的运用
    request各种请求的封装
    图片上传两种第三方库调用的封装函数
    JWT Token 生成与token的解析
    如何将windows文件传至linux
    windows 下python 环境安装
    shell的条件测试
    shell的数值运算
    shell基础认知
    cookie和代理
  • 原文地址:https://www.cnblogs.com/love-yh/p/7390205.html
Copyright © 2020-2023  润新知