寻找下一个结点

题目描述

请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。

给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。

基本方案,按照题目描述即可实现。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

class Successor {
public:
    vector<int> vec;
    void inorder(TreeNode* root){
        if(root){            
            inorder(root->left);
            vec.push_back(root->val);
            inorder(root->right);
        }        
    }
    int findSucc(TreeNode* root, int p) {
        // write code here
        if(root==nullptr) return -1;
        inorder(root);
        for(int i=0,len=vec.size();i<len-1;i++){
            if(p==vec[i]){
                return vec[i+1];
            }
        }
        return -1;            
    }
};

基本方法简单,但是采用了递归算法且空间复杂度O<n>。可以使用使用二叉树的非递归遍历算法。

posted on 2016-06-13 15:36  echoorchid  阅读(114)  评论(0编辑  收藏  举报

导航