50.二叉搜索樹第k小的結點

題目:給定一棵二叉搜索樹,請找出其中的第k小的結點。

解析:二叉搜索樹的左子樹的結點小於根節點,右子樹的結點大於根節點。左右子樹同樣的滿足該條件。其實中序遍歷二叉樹就是按照從小到大的順序輸出。

①利用迭代對二叉搜索樹進行中序遍歷;

②定義變量k,每訪問一個節點就將--k,直到k=0,此時將要訪問第k小的結點;

TreeNode KthNode(TreeNode pRoot, int k){
      Stack<TreeNode> stack = new Stack<TreeNode>();
       //迭代中序遍歷
      while(!stack.isEmpty()||pRoot!= null){
         while(pRoot!=null){
	   stack.push(pRoot);
	   pRoot = pRoot.left;
	 }
	 TreeNode node = stack.pop();
	 //每訪問一個節點就將k-1,最終訪問的就是第k小的結點
	 if (--k==0){
	    return node;
	 }
	 pRoot = node.right;
     }
     return null;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章