題目:給定一棵二叉搜索樹,請找出其中的第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;
}