zoukankan      html  css  js  c++  java
  • (剑指Offer)面试题58:二叉树的下一个结点

    题目:

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

    思路:

    考虑中序遍历的过程,

    如果当前结点存在右子节点,那么当前结点的下一个结点应该为该右子树的最左边的结点;

    如果当前结点没有右子节点,那么如果当前结点的父结点p->parent为其父结点的父结点p->parent->patent的左子结点,那么当前结点的下一结点即为其父结点;否则继续往上遍历,直至找到一个结点为其父结点的左子结点,那么该结点即为当前结点的下一结点,如果找不到,则返回NULL;

    (文字描述比较晦涩,大家可以画图看看)

    在线测试OJ:

    http://www.nowcoder.com/books/coding-interviews/9023a0c988684a53960365b889ceaf5e?rp=3

    AC代码:

    using namespace std;
    /*
    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;
            if(pNode->right!=NULL){
                TreeLinkNode* pTmp=pNode->right;
                while(pTmp->left!=NULL){
                    pTmp=pTmp->left;
                }
                return pTmp;
            }
            else{
                while(pNode->next!=NULL){
                    if(pNode==pNode->next->left)
                        return pNode->next;
                    pNode=pNode->next;
                }
                return NULL;
            }
        }
    };
  • 相关阅读:
    [分享]一个天气预报的WebService应用实例
    XMLHttpRequest Ajax 实例简介
    CSS选择符
    MSDN SmartCast更改下载步骤
    发掘VS2005 SP1 (二) 更好的支持主题
    .Net+MySQL组合开发(二) 数据访问篇
    最近一打开cnblogs首页,就弹出电影网站!
    今天有点爽
    .Net+MySQL组合开发(三) 乱码篇
    发掘VS2005 SP1 (三) 母模页
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4709117.html
Copyright © 2011-2022 走看看