All Possible Full Binary Trees
阿新 • • 發佈:2018-12-25
A full binary tree is a binary tree where each node has exactly 0 or 2 children.
Return a list of all possible full binary trees with N
nodes. Each element of the answer is the root node of one possible tree.
Each node
of each tree in the answer must
node.val = 0
.
You may return the final list of trees in any order.
Example 1:
Input: 7 Output: [[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]] Explanation:
Note:
1 <= N <= 20
題目理解:
每個節點含有0個或者2個節點的二叉樹稱為FBT。給定節點數目,返回所有可能的FBT
解題思路:
運用遞迴解決。每一棵FBT一定含有奇數個節點,其左右孩子也一定都含有奇數個節點,這樣就可以將問題分解為求左右子樹的問題。遍歷所有可能的子樹節點數目,然後將左右子樹連線都根節點返回即可。
程式碼如下:
class Solution { public List<TreeNode> allPossibleFBT(int N) { List<TreeNode> res = new ArrayList<TreeNode>(); if(N % 2 == 0) return res; if(N == 1) { res.add(new TreeNode(0)); return res; } for(int num_l = 1, num_r = N - 2; num_r > 0; num_l += 2, num_r -= 2) { List<TreeNode> nodes_l = allPossibleFBT(num_l); List<TreeNode> nodes_r = allPossibleFBT(num_r); for(TreeNode l : nodes_l) { for(TreeNode r : nodes_r) { TreeNode root = new TreeNode(0); root.left = l; root.right = r; res.add(root); } } } return res; } }