Kth Smallest Element in a BST

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

Example 1:

Input: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
Output: 1

Approach

Java

import java.util.ArrayList;
import java.util.List;

public class KthSmallestElemBST {
    public static void main(String[] args) {
        TreeNode root = new TreeNode(3);
        root.left = new TreeNode(1);
        root.right = new TreeNode(4);
        root.left.right = new TreeNode(2);
        int k = 1;
        System.out.println(kthSmallest(root, k));
    }

    static List<Integerres;

    // function to find the kth smallest element in the
    // tree
    static int kthSmallest(TreeNode rootint k) {
        res = new ArrayList<Integer>();
        dfs(root);
        return res.get(k - 1);
    }

    static void dfs(TreeNode root) {
        if (root == null)
            return;

        // call for left subtree
        dfs(root.left);

        // root data
        res.add(root.val);

        // call for right subtree
        dfs(root.right);
    }

}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode() {
    }

    TreeNode(int val) {
        this.val = val;
    }

    TreeNode(int valTreeNode leftTreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

C++

#include <bits/stdc++.h>
using namespace std;
//struct for treenode
struct TreeNode
{
    int data;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int data)
    {
        this->data = data;
        this->left = NULL;
        this->right = NULL;
    }
};
void dfs(TreeNode *rootvector<int&res)
{
    if (root == NULL)
        return;

    //call for left subtree
    dfs(root->leftres);

    //root data
    res.push_back(root->data);

    //call for right subtree
    dfs(root->rightres);
}

//function to find the kth smallest element in the
//tree
int kthSmallest(TreeNode *rootint k)
{
    vector<intres;
    dfs(rootres);
    return res[k - 1];
}

int main()
{

    TreeNode *root = new TreeNode(3);
    root->left = new TreeNode(1);
    root->right = new TreeNode(4);
    root->left->right = new TreeNode(2);
    int k = 1;
    cout << kthSmallest(rootk);
}


No comments:

Post a Comment