标签:this const node fun number 结果 处理 tco 一个
力扣链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/
题目描述
给定一棵二叉搜索树,请找出其中第k大的节点。
思路:中序遍历变体
按右->root->左的顺序遍历,并计数K
代码:
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @param {number} k * @return {number} */ var kthLargest = function(root, k) { let res; Inorder(root); return res; function Inorder(root){ if(!root) return; //中序遍历右节点,若遍历后k为0,说明已经找到第k大的数,提前返回。 Inorder(root.right); if(k === 0) return; //处理当前节点,若k-1=0,说明当前节点为第K大的节点,存下结果并返回。 if(--k === 0){ res = root.val; return; } //中序遍历左节点 Inorder(root.left); } };
迭代法:
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @param {number} k * @return {number} */ var kthLargest = function(root, k) { const stack = []; let count = 0; while(root || stack.length){ while(root){ stack.push(root); root = root.right; } const cur = stack.pop(); if(++count === k){ return cur.val; } root = cur.left; } };
时间复杂度:O(N),当需要找最小的树时要遍历所有节点;当二叉搜索树是一个链表时相当于在数组中线性搜索
空间复杂度:O(N),最坏情况需要O(N)的栈空间
标签:this const node fun number 结果 处理 tco 一个
原文地址:https://www.cnblogs.com/xintangchn/p/13233026.html