二叉搜索树序列
利用动态的dfs完成算法:
注意点:我在代码中进行了两次list复制,为什么这么处理呢?
result2的复制是为了防止后面被result修改的时候被同步修改。
list2的复制是因为外层在for循环list的值,这时候对list进行修改会影响for循环的操作
package cn.tiger.funny; import java.util.ArrayList; import java.util.List; // Definition for a binary tree node. public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } /** * 二叉搜索树序列 * @author jyuan * 从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。给定一个由不同节点组成的二叉搜索树,输出所有可能生成此树的数组。 示例: 给定如下二叉树 2 / \ 1 3 返回: [ [2,1,3], [2,3,1] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/bst-sequences-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 */ public class BSTSequence { List<List<Integer>> results = new ArrayList<List<Integer>>(); public List<List<Integer>> BSTSequences(TreeNode root) { if(root==null) { return results; } List<TreeNode> list = new ArrayList<TreeNode>(); list.add(root); List<Integer> result = new ArrayList<Integer>(); dfs(list, result); return results; } private void dfs(List<TreeNode> list, List<Integer> result) { List<TreeNode> list2 = new ArrayList<TreeNode>(list); if(list.isEmpty()) { List<Integer> result2 = new ArrayList<Integer>(result); results.add(result2); return; } for (TreeNode treeNode : list) { list2.remove(treeNode); if(treeNode.left != null) { list2.add(treeNode.left); } if(treeNode.right != null) { list2.add(treeNode.right); } result.add(treeNode.val); dfs(list2, result); result.remove((Integer)treeNode.val); list2.add(treeNode); if(treeNode.left != null) { list2.remove(treeNode.left); } if(treeNode.right != null) { list2.remove(treeNode.right); } } } }


浙公网安备 33010602011771号