zoukankan      html  css  js  c++  java
  • 面试题 04.09. 二叉搜索树序列

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

     示例:
    给定如下二叉树

            2
           / 
          1   3

    返回:

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

    大佬写的。未仔细研究:)

    搜索
    
    使用一个queue存储下个所有可能的节点
    然后选择其中一个作为path的下一个元素
    递归直到queue元素为空
    将对应的path加入结果中
    由于二叉搜索树没有重复元素, 而且每次递归的使用元素的顺序都不一样, 所以自动做到了去重
    class Solution {
    
        List<List<Integer>> res = new LinkedList<>();
    
        public List<List<Integer>> BSTSequences(TreeNode root) {
            if (root == null) {
                res.add(new LinkedList<>());
                return res;
            }
    
            LinkedList<Integer> path = new LinkedList<>();
            path.add(root.val);
    
            helper(root, new LinkedList<>(), path);
    
            return res;
        }
    
        public void helper(TreeNode root, LinkedList<TreeNode> queue, LinkedList<Integer> path){
            if (root == null) return;
    
            if (root.left != null) queue.add(root.left);
            if (root.right != null) queue.add(root.right);
    
            if (queue.isEmpty()) {
                res.add(new LinkedList<>(path));
                return;
            }
    
            int lens = queue.size();
            for (int i = 0; i < lens; i++){
                TreeNode cur = queue.get(i);
                queue.remove(i);         
                path.add(cur.val);
    
                helper(cur, new LinkedList<>(queue), path);
    
                queue.add(i, cur);
                path.removeLast();
            }
        }
    }
  • 相关阅读:
    XML 验证器
    XML 浏览器支持
    XML 元素
    查看 XML 文件
    XML 属性
    Android入门之Activity四种启动模式
    XML 简介
    XML 语法规则
    [Android]Thread线程入门3多线程
    XML 验证
  • 原文地址:https://www.cnblogs.com/kpwong/p/14716550.html
Copyright © 2011-2022 走看看