二叉搜索树的第k个结点
题目描述:
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
问题分析:
二叉搜索树:左子树都比根结点小,右子树都比根结点大
中序遍历:左结点-根结点-右结点,对于二叉搜索树来说,中序遍历就是有序的序列
对于本题而言,中序遍历之后,找第 k-1 个就行
代码展示:
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function KthNode(pRoot, k)
{
//核心在于中序遍历
var list = [];
addNode(pRoot,list);
return list[k-1];
}
//中序遍历
function addNode(root,list){
if(!root)
return;
addNode(root.left,list);
list.push(root);
addNode(root.right,list);
}
思考
如果不是二叉搜索树,而是二叉树,那么第k个节点应该如何查找?再把二叉树换成树呢?