题目:
给定一颗二叉搜索树,请找出其中的第k大的结点。
例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
思路:
二叉树的中序遍历就是排序后的结果,当前思路就是利用递归的中序列遍历完成.
//todo使用非递归的栈完成
代码:
public TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot == null || k <= 0)
return null;
ArrayList<TreeNode> arrayList = new ArrayList<>();
inOrder(pRoot,arrayList);
if(arrayList.size() < k ){
return null;
}
return arrayList.get(k-1);
}
private ArrayList<TreeNode> inOrder(TreeNode node,ArrayList<TreeNode> arrayList){
if(node == null){
return null;
}
if(node.left != null)
inOrder(node.left,arrayList);
arrayList.add(node);
if(node.right != null)
inOrder(node.right,arrayList);
return arrayList;
}
}
网友评论