Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d70fc7d

Browse files
committed
feat: add solutions to lc problem: No.0919
No.0919.Complete Binary Tree Inserter
1 parent 3f09a68 commit d70fc7d

File tree

6 files changed

+605
-30
lines changed

6 files changed

+605
-30
lines changed

‎solution/0900-0999/0919.Complete Binary Tree Inserter/README.md‎

Lines changed: 204 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
<li>给定节点或插入节点的每个值都在&nbsp;<code>0</code>&nbsp;到&nbsp;<code>5000</code>&nbsp;之间。</li>
4444
</ol>
4545

46-
4746
## 解法
4847

4948
<!-- 这里可写通用的实现逻辑 -->
@@ -55,15 +54,219 @@
5554
<!-- 这里可写当前语言的特殊实现逻辑 -->
5655

5756
```python
57+
# Definition for a binary tree node.
58+
# class TreeNode:
59+
# def __init__(self, val=0, left=None, right=None):
60+
# self.val = val
61+
# self.left = left
62+
# self.right = right
63+
class CBTInserter:
64+
65+
def __init__(self, root: TreeNode):
66+
self.tree = []
67+
q = collections.deque([root])
68+
while q:
69+
n = len(q)
70+
for _ in range(n):
71+
node = q.popleft()
72+
self.tree.append(node)
73+
if node.left:
74+
q.append(node.left)
75+
if node.right:
76+
q.append(node.right)
77+
78+
def insert(self, val: int) -> int:
79+
pidx = (len(self.tree) - 1) >> 1
80+
node = TreeNode(val=val)
81+
self.tree.append(node)
82+
if self.tree[pidx].left is None:
83+
self.tree[pidx].left = node
84+
else:
85+
self.tree[pidx].right = node
86+
return self.tree[pidx].val
5887

88+
def get_root(self) -> TreeNode:
89+
return self.tree[0]
90+
91+
92+
# Your CBTInserter object will be instantiated and called as such:
93+
# obj = CBTInserter(root)
94+
# param_1 = obj.insert(val)
95+
# param_2 = obj.get_root()
5996
```
6097

6198
### **Java**
6299

63100
<!-- 这里可写当前语言的特殊实现逻辑 -->
64101

65102
```java
103+
/**
104+
* Definition for a binary tree node.
105+
* public class TreeNode {
106+
* int val;
107+
* TreeNode left;
108+
* TreeNode right;
109+
* TreeNode() {}
110+
* TreeNode(int val) { this.val = val; }
111+
* TreeNode(int val, TreeNode left, TreeNode right) {
112+
* this.val = val;
113+
* this.left = left;
114+
* this.right = right;
115+
* }
116+
* }
117+
*/
118+
class CBTInserter {
119+
private List<TreeNode> tree;
120+
121+
public CBTInserter(TreeNode root) {
122+
tree = new ArrayList<>();
123+
Deque<TreeNode> q = new ArrayDeque<>();
124+
q.offerLast(root);
125+
while (!q.isEmpty()) {
126+
TreeNode node = q.pollFirst();
127+
tree.add(node);
128+
if (node.left != null) {
129+
q.offerLast(node.left);
130+
}
131+
if (node.right != null) {
132+
q.offerLast(node.right);
133+
}
134+
}
135+
}
136+
137+
public int insert(int val) {
138+
int pidx = (tree.size() - 1) >> 1;
139+
TreeNode node = new TreeNode(val);
140+
tree.add(node);
141+
if (tree.get(pidx).left == null) {
142+
tree.get(pidx).left = node;
143+
} else {
144+
tree.get(pidx).right = node;
145+
}
146+
return tree.get(pidx).val;
147+
}
148+
149+
public TreeNode get_root() {
150+
return tree.get(0);
151+
}
152+
}
153+
154+
/**
155+
* Your CBTInserter object will be instantiated and called as such:
156+
* CBTInserter obj = new CBTInserter(root);
157+
* int param_1 = obj.insert(val);
158+
* TreeNode param_2 = obj.get_root();
159+
*/
160+
```
161+
162+
### **C++**
163+
164+
```cpp
165+
/**
166+
* Definition for a binary tree node.
167+
* struct TreeNode {
168+
* int val;
169+
* TreeNode *left;
170+
* TreeNode *right;
171+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
172+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
173+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
174+
* };
175+
*/
176+
class CBTInserter {
177+
public:
178+
vector<TreeNode*> tree;
179+
180+
CBTInserter(TreeNode* root) {
181+
queue<TreeNode*> q;
182+
q.push(root);
183+
while (!q.empty())
184+
{
185+
auto node = q.front();
186+
q.pop();
187+
tree.push_back(node);
188+
if (node->left) q.push(node->left);
189+
if (node->right) q.push(node->right);
190+
}
191+
}
192+
193+
int insert(int val) {
194+
int pidx = tree.size() - 1 >> 1;
195+
TreeNode* node = new TreeNode(val);
196+
tree.push_back(node);
197+
if (!tree[pidx]->left) tree[pidx]->left = node;
198+
else tree[pidx]->right = node;
199+
return tree[pidx]->val;
200+
}
201+
202+
TreeNode* get_root() {
203+
return tree[0];
204+
}
205+
};
206+
207+
/**
208+
* Your CBTInserter object will be instantiated and called as such:
209+
* CBTInserter* obj = new CBTInserter(root);
210+
* int param_1 = obj->insert(val);
211+
* TreeNode* param_2 = obj->get_root();
212+
*/
213+
```
214+
215+
### **Go**
216+
217+
```go
218+
/**
219+
* Definition for a binary tree node.
220+
* type TreeNode struct {
221+
* Val int
222+
* Left *TreeNode
223+
* Right *TreeNode
224+
* }
225+
*/
226+
type CBTInserter struct {
227+
tree []*TreeNode
228+
}
229+
230+
func Constructor(root *TreeNode) CBTInserter {
231+
var q []*TreeNode
232+
var tree []*TreeNode
233+
q = append(q, root)
234+
for len(q) > 0 {
235+
node := q[0]
236+
tree = append(tree, node)
237+
q = q[1:]
238+
if node.Left != nil {
239+
q = append(q, node.Left)
240+
}
241+
if node.Right != nil {
242+
q = append(q, node.Right)
243+
}
244+
}
245+
return CBTInserter{tree}
246+
}
247+
248+
func (this *CBTInserter) Insert(val int) int {
249+
pidx := (len(this.tree) - 1) >> 1
250+
node := &TreeNode{Val: val}
251+
this.tree = append(this.tree, node)
252+
if this.tree[pidx].Left == nil {
253+
this.tree[pidx].Left = node
254+
} else {
255+
this.tree[pidx].Right = node
256+
}
257+
return this.tree[pidx].Val
258+
}
259+
260+
func (this *CBTInserter) Get_root() *TreeNode {
261+
return this.tree[0]
262+
}
66263
264+
/**
265+
* Your CBTInserter object will be instantiated and called as such:
266+
* obj := Constructor(root);
267+
* param_1 := obj.Insert(val);
268+
* param_2 := obj.Get_root();
269+
*/
67270
```
68271

69272
### **...**

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /