思路:
方法1:使用二叉树的中序遍历非递归版,利用栈和一个计数变量得到第k小节点。
TreeNode KthNode(TreeNode pRoot, int k)
{
if(k==0)return null;
Stack<TreeNode> stack = new Stack<>();
while(pRoot!=null||!stack.isEmpty()){
if(pRoot!=null){
stack.push(pRoot);
pRoot=pRoot.left;
}else{
TreeNode node = stack.pop();
if(--k==0) return node;
pRoot = node.right;
}
}
return null;
}方法2:使用dfs,中序遍历用全局变量记录递归过程的次数和节点引用。
int time = 0;
TreeNode node = null;
TreeNode KthNode(TreeNode pRoot, int k)
{
dfs(pRoot,k);
return node;
}
void dfs(TreeNode pRoot,int k){
if(pRoot == null)return;
KthNode(pRoot.left,k);
if(++time==k){
node = pRoot;
return;
}
KthNode(pRoot.right,k);
}
京公网安备 11010502036488号