剑指offer-二叉树的下一个结点

2016/05/24 C和C++基础

题目描述

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

#include <iostream>
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){                               //右结点为空 则遍历其父结点
            if(pNode->next==NULL) return NULL;                //如果父为根结点
            if(pNode->next->left==pNode) return pNode->next;  //如果该结点为父结点的左孩子 则下一个结点遍历父结点
            
            TreeLinkNode *p=pNode->next;
            while(p->next!=NULL&&p!=p->next->left)
                p=p->next;
            return p->next;
        }else{
            TreeLinkNode *p=pNode->right;
            while(p->left!=NULL)
                p=p->left;
            return p;
        }
    }
};

Search

    Post Directory