zoukankan      html  css  js  c++  java
  • 57、剑指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     {
    16         if(pNode == NULL)
    17             return NULL;
    18         TreeLinkNode *pNext = NULL;
    19         //有右结点,其下一结点为右结点的最左子结点
    20         if(pNode->right != NULL)
    21         {
    22             TreeLinkNode *pRight = pNode->right;
    23             while(pRight->left != NULL)
    24                 pRight = pRight->left;
    25             pNext = pRight;
    26         }
    27         //无右结点
    28         else
    29         {
    30             TreeLinkNode *pCurrent = pNode;
    31             TreeLinkNode *pParent = pNode->next;
    32             while(pParent != NULL && pCurrent == pParent->right)//是父结点的右子结点,沿父结点一直向上查找
    33             {
    34                 pCurrent =pParent;
    35                 pParent = pParent->next;
    36             }
    37             pNext = pParent;
    38         }
    39         return pNext;
    40     }
    41 };
  • 相关阅读:
    2008 server 备份
    IBM公共文档库javascript
    javascript 删除节点
    鼠标onfocus或onblur效果
    jquery绿色版dreamweaver提示
    修复IE6下 25+ Bugs
    parentNode, removeChild, nextSibling, firstChild的练习
    近期技术讨论贴(持续更新:1210)
    png图片(有含有透明)在IE6中为什么不透明了
    浅谈javascript面向对象编程
  • 原文地址:https://www.cnblogs.com/qqky/p/7113140.html
Copyright © 2011-2022 走看看