【Java】 劍指offer(54) 二叉搜索樹的第k個結點

 

本文參考自《劍指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

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.熟練掌握二叉搜索樹和中序遍歷。get

  2.用中序遍歷實現功能時,必定要注意返回值是否知足要求。it

  

更多:《劍指Offer》Java實現合集 

相關文章
相關標籤/搜索