Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
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。 * @author Administrator * */ 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; } }