## K-th node wins the offer-34. Binary search tree (269)

#### 34. The k-th node in a binary search tree (269)

• Topic Description: Given a binary search tree, please find the first k smaller nodes therein. For example, (5,3,7,2,4,6,8), the numerical values ​​according to the third junction point is 4 summary.

• Ideas: for a binary search tree traversal sequence, when the count of the access node. If the k-th access node is returned.

• Code

``````package _34.二叉搜索树中第k的结点;

import java.util.Stack;

/**
* 题目描述：给定一棵二叉搜索树，请找出其中的第k小的结点。
* 例如， （5，3，7，2，4，6，8）    中，按结点数值大小顺序第三小结点的值为4。
*
*/
public class KthNodeInBST {
/**
* 中序遍历到第k个结点
* @param pRoot
* @param k
* @return
*/
static TreeNode KthNode(TreeNode pRoot, int k) {
if(pRoot == null) return null;

Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = pRoot;

int i = 0;
while(!stack.isEmpty() || cur != null){
while(cur != null){
stack.push(cur);
cur = cur.left;
}
if(cur == null){
cur = stack.pop();
//访问
i++;
if(i == k){
return cur;
}
cur = cur.right;
}
}

return null;
}

public static void main(String[] args) {
/**
*          5
/   \
3     7
/ \   / \
2  4  6   8
*/
TreeNode root = new TreeNode(5);
root.left = new TreeNode(3);
root.left.left = new TreeNode(2);
root.left.right = new TreeNode(4);
root.right = new TreeNode(7);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(8);
System.out.println(KthNode(root,3).val);//4
System.out.println(KthNode(root,6).val);//7
System.out.println(KthNode(root,8));//null
}
}

class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

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

}
}
``````

### Guess you like

Origin blog.csdn.net/qq_38332722/article/details/100558199
Recommended
Ranking
Daily