leetcode--Kth Smallest Element in a BST

来源:互联网 发布:软件行业 技术规范 编辑:程序博客网 时间:2024/05/01 14:47

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.

Note:
You may assume k is always valid, 1 ≤ k ≤ BST’s total elements.

Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?

Hint:

Try to utilize the property of a BST.Show More Hint
Credits:
Special thanks to @ts for adding this problem and creating all test cases.

两种思路:
1.空间换时间
BST的特性是,如果按照中序排列,得到的递增序;所以可以使用一个stack进行中序遍历,直到找到第K个元素;
2. 树树的结点数
对于每个节点root,计算以它为根节点的树的节点数,计作S。
如果S==K,返回root->val;
如果S > K,在root的左子树里面查找第K小元素;
如果S

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public int kthSmallest(TreeNode root, int k) {        Stack<TreeNode> s = new Stack<>();        TreeNode p=root;        s.push(p);        int cnt=0;        do{            while(p!=null){                s.push(p);                p=p.left;            }            TreeNode top=s.pop();            cnt++;            if(cnt==k){                return top.val;            }            p=top.right;        }while(!s.empty());        return 0;    }}

思路2代码:

/** * 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 kthSmallest(TreeNode* root, int k) {        int left=findNodesSum(root->left);        if(left+1==k){            return root->val;        }else if(left+1<k){            return kthSmallest(root->right,k-left-1);        }else{            return kthSmallest(root->left,k);        }    }    int findNodesSum(TreeNode* root){        if(!root){            return 0;        }        int sum = findNodesSum(root->left)+findNodesSum(root->right)+1;        return sum;    }};

自己的个人博客: bingtel-木犹如此的博客, 有兴趣可以关注下。

1 0
原创粉丝点击