本文參考自《劍指offer》一書,代碼采用Java語言。
題目
給定一棵二叉搜索樹,請找出其中的第k小的結點。
思路
設置全局變量index=0,對BST進行中序遍歷,每遍歷一個結點,index+1,當index=k時,該結點即為所求結點。
測試算例
1.功能測試(左斜樹、右斜樹、普通樹)
2.邊界值測試(k=1,k=結點數目)
3.特殊測試(null,k<=0,k>結點數目)
Java代碼
//題目:給定一棵二叉搜索樹,請找出其中的第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.熟練掌握二叉搜索樹和中序遍歷。
2.用中序遍歷實現功能時,一定要注意返回值是否滿足要求。
