zoukankan      html  css  js  c++  java
  • 【LeetCode-树】后继者

    题目描述

    设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。
    如果指定节点没有对应的“下一个”节点,则返回null。
    示例:

    输入: root = [2,1,3], p = 1
    
      2
     / 
    1   3
    
    输出: 2
    
    输入: root = [5,3,6,2,4,null,null,1], p = 6
    
          5
         / 
        3   6
       / 
      2   4
     /   
    1
    
    输出: null
    

    思路

    本质上是二叉树的中序遍历。使用 pre 表示当前节点的前一个节点,如果 pre->val==目标值,输出当前节点即可。代码如下:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
            if(root==nullptr || p==nullptr) return nullptr;
    
            stack<pair<TreeNode*, bool>> s;
            s.push(make_pair(root, false));
            TreeNode* pre = nullptr;
            while(!s.empty()){
                TreeNode* curNode = s.top().first;
                bool visit = s.top().second;
                s.pop();
                if(!visit){
                    if(curNode->right!=nullptr) s.push(make_pair(curNode->right, false));
                    s.push(make_pair(curNode, true));
                    if(curNode->left!=nullptr) s.push(make_pair(curNode->left, false));
                }else{
                    if(pre!=nullptr && pre->val==p->val) return curNode;
                    if(curNode->val==p->val) pre = curNode;
    
                }
            }
            return nullptr;
        }
    };
    
    • 时间复杂度:O(n)
    • 空间复杂度:O(h)
      h 为树高。
  • 相关阅读:
    IntelliJ IDEA 14.03 java 中文文本处理中的编码格式设置
    应聘感悟
    STL string分析
    CUDA SDK VolumeRender 分析 (1)
    BSP
    CUDA SDK VolumeRender 分析 (3)
    CUDA SDK VolumeRender 分析 (2)
    Windows软件发布时遇到的一些问题
    Ten Commandments of Egoless Programming (转载)
    复习下光照知识
  • 原文地址:https://www.cnblogs.com/flix/p/12837756.html
Copyright © 2011-2022 走看看