题目
结果
代码
逃课做法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| class TreeNode { int val; TreeNode left; TreeNode right;
TreeNode() { }
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } }
class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { List<Integer> path = new LinkedList<>(); dfs(root, path); path.add(val); path.sort(Integer::compareTo); return buildTree(path); }
private TreeNode buildTree(List<Integer> path) { TreeNode root = new TreeNode(0); TreeNode p = root; for (int val : path) { p.right = new TreeNode(val); p = p.right; } return root.right; }
private void dfs(TreeNode root, List<Integer> path) { if (root == null) { return; } path.add(root.val); dfs(root.left, path); dfs(root.right, path); } }
|
这题目不管是用迭代还是递归都挺简单的,好像也没必要逃课。
一般做法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { if (root == null) { return new TreeNode(val); } TreeNode p = root; while (true) { if (val < p.val) { if (p.left == null) { p.left = new TreeNode(val); break; } else { p = p.left; } } else { if (p.right == null) { p.right = new TreeNode(val); break; } else { p = p.right; } } } return root; } }
|
复杂度
时间复杂度:O(n),最坏情况下
空间复杂度:O(1),迭代