《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。

来源:互联网 发布:atom php常用插件 编辑:程序博客网 时间:2024/06/11 04:45

题目:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。

解析:看到我写的下面的代码,像一篇文章一样的长,我也是醉了,先提交上去了。思想就是先来个层次遍历二叉树,得到所有的节点的值,然后再排序,取到第k大的节点的值。当然这个只是值,而不是节点,需要得到具体的节点信息,我们需要再重新遍历下该二叉树,得到节点值为该值的节点,然后返回。

/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/import java.util.*;public class Solution {    TreeNode KthNode(TreeNode pRoot, int k)    {        if(k==0){            return null;        }        List<Integer> list = new ArrayList<>();//存节点的值        Queue<TreeNode> queue = new LinkedList<>();//存节点        if(pRoot==null){            return null;        }        queue.add(pRoot);        int current =1;        int next=0;        while (!queue.isEmpty()){//层次遍历二叉树,然后得到所有节点的值            TreeNode node=queue.poll();            current--;            list.add(node.val);            if(node.left!=null){                queue.add(node.left);                next++;            }            if(node.right!=null){                queue.add(node.right);                next++;            }            if(current==0){                current=next;                next=0;            }        }        Collections.sort(list);//给遍历的二叉树值的list排序,得到第k大的节点信息        if(k>list.size()){            return null;        }        int num=list.get(k-1);        queue.clear();        queue.add(pRoot);        current=1;        next=0;        TreeNode result=null;        while (!queue.isEmpty()){            TreeNode node=queue.poll();            current--;            if(node.val==num){//找到第k大的节点信息,然后返回                result=node;                return result;            }            if(node.left!=null){                queue.add(node.left);                next++;            }            if(node.right!=null){                queue.add(node.right);                next++;            }            if(current==0){                current=next;                next=0;            }        }        return result;    }}
阅读全文
0 0
原创粉丝点击