中序遍历二叉树的典型代码!
遍历二叉搜索树:(给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 24 6 8 中,按结点数值大小顺序第三个结点的值为4。)
递归:
public class Solution {
int index = 0;
TreeNode KthNode(TreeNode root, int k)
{
if(root != null){
TreeNode node = KthNode(root.left,k); //中序遍历!
// 先遍历左子树,得到结果
if(node != null)
return node;
index ++; //中序操作
if(index == k)
return root;
node = KthNode(root.right,k); //最后!遍历右子树
if(node != null)
return node;
}
return null;
}
}
非递归:
import java.util.Stack;
public class Solution {
int count = 0;
TreeNode KthNode(TreeNode pRoot, int k)
{
if(count > k || pRoot == null)
return null;
TreeNode p = pRoot;
Stack<TreeNode> LDRStack = new Stack<TreeNode>();
TreeNode kthNode = null;
while(p != null || !LDRStack.isEmpty()){
while(p != null){ //中序遍历!遍历左子树入栈
LDRStack.push(p);
p = p.left;
}
TreeNode node = LDRStack.pop();
System.out.print(node.val+",");
count++;
if(count == k){
kthNode = node;
}
p = node.right; //最后一步,读取右子树
}
return kthNode;
}
}