码迷,mamicode.com
首页 > 其他好文 > 详细

程序员面试金典-面试题 04.09. 二叉搜索树序列

时间:2020-03-07 14:42:01      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:div   结果   seq   开始   列表   结束   示例   搜索   gets   

题目:

从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。给定一个由不同节点组成的二叉树,输出所有可能生成此树的数组。

示例:
给定如下二叉树

2
/ \
1 3
返回:

[
[2,1,3],
[2,3,1]
]

分析:

根据题意分析可知,插入元素的顺序必须从根节点开始插入,也就是先插入2后,才可以插入1和3。那么我们维护一个可以访问的节点列表,每轮递归都依次访问列表中的元素,当访问元素有孩子结点时,把孩子结点加入到列表中,然后再去依次访问列表中的元素,当列表为空时,表示产生了一个有效的序列,把它加入到结果集当中。注意访问结点时,要先在列表中删除掉,访问结束后记得恢复。

程序:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> BSTSequences(TreeNode root) {
        res = new LinkedList<>();
        if(root == null){
            res.add(new LinkedList<>());
            return res;
        }
        LinkedList<TreeNode> list = new LinkedList<>();
        LinkedList<Integer> path = new LinkedList<>();
        path.add(root.val);
        getSequences(root, list, path);
        return res;
    }
    private void getSequences(TreeNode root, LinkedList<TreeNode> list, LinkedList<Integer> path){
        if(root == null){
            return;
        }
        if(root.left != null)
            list.add(root.left);
        if(root.right != null)
            list.add(root.right);
        if(list.isEmpty()){
            res.add(new LinkedList<>(path));
            return;
        }
        int len = list.size();
        for(int i = 0; i < len; ++i){
            TreeNode cur = list.get(i);
            list.remove(i);
            path.add(cur.val);
            getSequences(cur, new LinkedList<>(list), path);
            path.removeLast();
            list.add(i, cur);
        }
    }
    private List<List<Integer>> res;
}

 

程序员面试金典-面试题 04.09. 二叉搜索树序列

标签:div   结果   seq   开始   列表   结束   示例   搜索   gets   

原文地址:https://www.cnblogs.com/silentteller/p/12434101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!