本文参考自《剑指offer》一书,代码采用Java语言。

更多:《剑指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.用中序遍历实现功能时,一定要注意返回值是否满足要求。

  

更多:《剑指Offer》Java实现合集  

  

相关文章:

  • 2021-10-19
  • 2022-12-23
  • 2021-08-24
  • 2021-11-24
  • 2021-08-25
  • 2021-07-01
  • 2021-04-26
  • 2021-11-19
猜你喜欢
  • 2021-06-11
  • 2021-06-07
  • 2021-06-29
  • 2022-12-23
  • 2021-06-20
  • 2021-07-29
相关资源
相似解决方案