/** * 题目: * 给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。 * * 解题思路: * 如果按照中序遍历的顺序遍历一颗二叉搜索树,则遍历序列的数值是递增排序的。 */ import java.util.ArrayList; public class P269_FindKthNode { ArrayList<TreeNode> list = new ArrayList<>(); public TreeNode FindKthNode(TreeNode pRoot, int k) { TreeNode result = null; if (pRoot == null || k == 0) { return result; } InorderTraversal(pRoot); if (k <= list.size()) { result = list.get(k - 1); } else return null; return result; } public void InorderTraversal(TreeNode pRoot){ if (pRoot == null) { return ; } if (pRoot.left != null) { InorderTraversal(pRoot.left); } list.add(pRoot); if (pRoot.right != null) { InorderTraversal(pRoot.right); } } //测试函数 public static void main(String[] args) { TreeNode node1 = new TreeNode(5); TreeNode node2 = new TreeNode(3); TreeNode node3 = new TreeNode(7); TreeNode node4 = new TreeNode(2); TreeNode node5 = new TreeNode(4); TreeNode node6 = new TreeNode(6); TreeNode node7 = new TreeNode(8); node1.left = node2; node1.right = node3; node2.left = node4; node2.right = node5; node3.left = node6; node3.right = node7; P269_FindKthNode test = new P269_FindKthNode(); TreeNode result = test.FindKthNode(node1, 3); System.out.println(result.val); } }
剑指offer:二叉搜索树的第k大节点(java)
猜你喜欢
转载自blog.csdn.net/Sunshine_liang1/article/details/82869850
今日推荐
周排行