二叉搜索树的题目

来源:互联网 发布:恶作剧软件 编辑:程序博客网 时间:2024/06/11 16:48

中序遍历二叉树的典型代码!

遍历二叉搜索树:(给定一颗二叉搜索树,请找出其中的第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;    }}