[LeetCode] 958. Check Completeness of a Binary Tree

ProblemGiven a binary tree, determine if it is a complete binary tree.Definition of a complete binary tree from Wikipedia:In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2^h nodes inclusive at the last level h.Solutionclass Solution { public boolean isCompleteTree(TreeNode root) { if (root == null) return true; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); boolean lastLevel = false; while (!queue.isEmpty()) { TreeNode cur = queue.poll(); if (cur == null) lastLevel = true; else { if (lastLevel) return false; queue.offer(cur.left); queue.offer(cur.right); } } return true; }} ...

January 14, 2019 · 1 min · jiezi

[LeetCode] 545. Boundary of Binary Tree

ProblemGiven a binary tree, return the values of its boundary in anti-clockwise direction starting from root. Boundary includes left boundary, leaves, and right boundary in order without duplicate nodes.Left boundary is defined as the path from root to the left-most node. Right boundary is defined as the path from root to the right-most node. If the root doesn’t have left subtree or right subtree, then the root itself is left boundary or right boundary. Note this definition only applies to the input binary tree, and not applies to any subtrees.The left-most node is defined as a leaf node you could reach when you always firstly travel to the left subtree if exists. If not, travel to the right subtree. Repeat until you reach a leaf node.The right-most node is also defined by the same way with left and right exchanged.Example 1Input: 1 \ 2 / \ 3 4Ouput:[1, 3, 4, 2]Explanation:The root doesn’t have left subtree, so the root itself is left boundary.The leaves are node 3 and 4.The right boundary are node 1,2,4. Note the anti-clockwise direction means you should output reversed right boundary.So order them in anti-clockwise without duplicates and we have [1,3,4,2].Example 2Input: 1_ / \ 2 3 / \ / 4 5 6 / \ / \ 7 8 9 10 Ouput:[1,2,4,7,8,9,10,6,3]Explanation:The left boundary are node 1,2,4. (4 is the left-most node according to definition)The leaves are node 4,7,8,9,10.The right boundary are node 1,3,6,10. (10 is the right-most node).So order them in anti-clockwise without duplicate nodes we have [1,2,4,7,8,9,10,6,3].Solutionclass Solution { public List<Integer> boundaryOfBinaryTree(TreeNode root) { List<Integer> res = new ArrayList<>(); if (root == null) return res; res.add(root.val); helper(root.left, true, false, res); helper(root.right, false, true, res); return res; } private void helper(TreeNode root, boolean leftBound, boolean rightBound, List<Integer> res) { if (root == null) return; if (root.left == null && root.right == null) { res.add(root.val); return; } if (leftBound) res.add(root.val); helper(root.left, leftBound, root.right == null && rightBound, res); helper(root.right, root.left == null && leftBound, rightBound, res); if (rightBound) res.add(root.val); }} ...

January 14, 2019 · 2 min · jiezi

[LeetCode] 617. Merge Two Binary Trees

ProblemGiven two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tree.Example 1:Input:Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 Output:Merged tree: 3 / \ 4 5 / \ \ 5 4 7Note: The merging process must start from the root nodes of both trees.Solutionclass Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if (t1 == null) return t2; if (t2 == null) return t1; int value = t1.val + t2.val; TreeNode root = new TreeNode(value); root.left = mergeTrees(t1.left, t2.left); root.right = mergeTrees(t1.right, t2.right); return root; }} ...

December 31, 2018 · 1 min · jiezi