本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
給定一棵二叉搜索樹,請找出其中的第k小的結點。post
設置全局變量index=0,對BST進行中序遍歷,每遍歷一個結點,index+1,當index=k時,該結點即爲所求結點。測試
測試算例 this
1.功能測試(左斜樹、右斜樹、普通樹)url
2.邊界值測試(k=1,k=結點數目)htm
3.特殊測試(null,k<=0,k>結點數目)blog
//題目:給定一棵二叉搜索樹,請找出其中的第k大的結點。 public class KthNodeInBST { public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } int index=0; TreeNode KthNode(TreeNode pRoot, int k){ TreeNode pNode = null; if(pRoot==null || k<=0) return pNode; pNode = getKthNode(pRoot,k); return pNode; } private TreeNode getKthNode(TreeNode pRoot, int k){ TreeNode kthNode=null; if(pRoot.left!=null) kthNode=getKthNode(pRoot.left,k); if(kthNode==null){ index++; if(k==index) kthNode = pRoot; } if(kthNode==null && pRoot.right!=null) kthNode=getKthNode(pRoot.right,k); return kthNode; } }
1.熟練掌握二叉搜索樹和中序遍歷。get
2.用中序遍歷實現功能時,必定要注意返回值是否知足要求。it