题解 | #二叉搜索树的第k个结点#
二叉搜索树的第k个结点
http://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a
1.python 解法,使用栈来统计了,非递归模式:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回对应节点TreeNode
def KthNode(self, pRoot, k):
# write code here
#print('123')
if not pRoot or not k:
return None
stack = []
cur = pRoot
while stack or cur:
if cur:
stack.append(cur)
cur = cur.left
else:
k -= 1
cur = stack.pop()
if k == 0:
return cur
cur = cur.right
return None
2.java解法,和python一样的思路:
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.Stack;
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k) {
if(pRoot == null || k == 0){
return null;
}
Stack<TreeNode> st = new Stack<>();
TreeNode cur = pRoot;
while(cur!=null || !st.isEmpty()){
if(cur!=null){
st.push(cur);
cur = cur.left;
}
else{
cur = st.pop();
if(--k == 0){
return cur;
}
cur = cur.right;
}
}
return null;
}
}
- go解法不罗列了,go构建stack都烦的一比

查看4道真题和解析
