首页 > 编程语言 > 详细

剑指Offer-61.序列化二叉树(C++/Java)

时间:2019-12-30 13:24:47      阅读:119      评论:0      收藏:0      [点我收藏+]

题目:

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。

分析:

二叉搜索树的前序遍历结果正好是按数值升序排列的结果,我们可以利用前序遍历将结点按val值的顺序存储到数组中,然后直接按索引返回即可。

程序:

C++

class Solution {
public:
    TreeNode* KthNode(TreeNode* pRoot, int k)
    {
        if(pRoot == nullptr)
            return pRoot;
        helper(pRoot);
        if(k > res.size() || k < 1)
            return nullptr;
        return res[k-1];
    }
    void helper(TreeNode* pRoot){
        if(pRoot == nullptr)
            return;
        helper(pRoot->left);
        res.push_back(pRoot);
        helper(pRoot->right);
    }
private:
    vector<TreeNode*> res;
};

Java

import java.util.*;
public class Solution {
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        if(pRoot == null)
            return pRoot;
        helper(pRoot);
        if(k < 1 || k > list.size())
            return null;
        return list.get(k-1);
    }
    void helper(TreeNode pRoot){
        if(pRoot == null)
            return;
        helper(pRoot.left);
        list.add(pRoot);
        helper(pRoot.right);
    }
private ArrayList<TreeNode> list = new ArrayList<>();
}

剑指Offer-61.序列化二叉树(C++/Java)

原文:https://www.cnblogs.com/silentteller/p/12118658.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!