1. 程式人生 > 實用技巧 >乾貨:用好這13款VSCode外掛,工作效率提升10倍

乾貨:用好這13款VSCode外掛,工作效率提升10倍

題目描述

給定一棵二叉搜尋樹,請找出其中第k大的節點。

示例1:

輸入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
輸出: 4

示例2:

輸入: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
輸出: 4

限制:

1 ≤ k ≤ 二叉搜尋樹元素個數

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof

程式碼實現

/**
 * 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:
    int kthLargest(TreeNode* root, int k) {
        TreeNode* p = root;
        stack<TreeNode*> node_stack;
        while(p != NULL || !node_stack.empty()) {
            while(p != NULL) {
                node_stack.push(p);
                p = p->right;
            }
            if(!node_stack.empty()) {
                TreeNode* t = node_stack.top();
                p = t->left;
                node_stack.pop();
                k--;
                if(k == 0)  return t->val;
            }
        }
        return NULL;
    }
};

思路解析

  • 常用的中序遍歷二叉搜尋樹(左子樹->根節點->右子樹),可從小到大輸出元素。
  • 逆序中序遍歷二叉搜尋樹(右子樹->根節點->左子樹),當輸出第k個元素時直接返回。
  • 使用迴圈中序遍歷二叉搜尋樹。