@@ -69,13 +69,138 @@ After removing, new nodes become leaf nodes with value (target = 2) (Picture in
69
69
### ** Python3**
70
70
71
71
``` python
72
-
72
+ # Definition for a binary tree node.
73
+ # class TreeNode:
74
+ # def __init__(self, val=0, left=None, right=None):
75
+ # self.val = val
76
+ # self.left = left
77
+ # self.right = right
78
+ class Solution :
79
+ def removeLeafNodes (self , root : Optional[TreeNode], target : int ) -> Optional[TreeNode]:
80
+ def dfs (root , prev ):
81
+ if root is None :
82
+ return
83
+ dfs(root.left, root)
84
+ dfs(root.right, root)
85
+ if root.left is None and root.right is None and root.val == target:
86
+ if prev.left == root:
87
+ prev.left = None
88
+ else :
89
+ prev.right = None
90
+
91
+ p = TreeNode(val = 0 , left = root)
92
+ dfs(root, p)
93
+ return p.left
73
94
```
74
95
75
96
### ** Java**
76
97
77
98
``` java
99
+ /**
100
+ * Definition for a binary tree node.
101
+ * public class TreeNode {
102
+ * int val;
103
+ * TreeNode left;
104
+ * TreeNode right;
105
+ * TreeNode() {}
106
+ * TreeNode(int val) { this.val = val; }
107
+ * TreeNode(int val, TreeNode left, TreeNode right) {
108
+ * this.val = val;
109
+ * this.left = left;
110
+ * this.right = right;
111
+ * }
112
+ * }
113
+ */
114
+ class Solution {
115
+ public TreeNode removeLeafNodes (TreeNode root , int target ) {
116
+ TreeNode p = new TreeNode (0 , root, null );
117
+ dfs(root, p, target);
118
+ return p. left;
119
+ }
120
+
121
+ private void dfs (TreeNode root , TreeNode prev , int target ) {
122
+ if (root == null ) {
123
+ return ;
124
+ }
125
+ dfs(root. left, root, target);
126
+ dfs(root. right, root, target);
127
+ if (root. left == null && root. right == null && root. val == target) {
128
+ if (prev. left == root) {
129
+ prev. left = null ;
130
+ } else {
131
+ prev. right = null ;
132
+ }
133
+ }
134
+ }
135
+ }
136
+ ```
137
+
138
+ ### ** C++**
139
+
140
+ ``` cpp
141
+ /* *
142
+ * Definition for a binary tree node.
143
+ * struct TreeNode {
144
+ * int val;
145
+ * TreeNode *left;
146
+ * TreeNode *right;
147
+ * TreeNode() : val(0), left(nullptr), right(nullptr) {}
148
+ * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
149
+ * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
150
+ * };
151
+ */
152
+ class Solution {
153
+ public:
154
+ TreeNode* removeLeafNodes(TreeNode* root, int target) {
155
+ TreeNode* p = new TreeNode(0, root, nullptr);
156
+ dfs(root, p, target);
157
+ return p->left;
158
+ }
159
+
160
+ void dfs(TreeNode* root, TreeNode* prev, int target) {
161
+ if (!root) return;
162
+ dfs(root->left, root, target);
163
+ dfs(root->right, root, target);
164
+ if (!root->left && !root->right && root->val == target)
165
+ {
166
+ if (prev->left == root) prev->left = nullptr;
167
+ else prev->right = nullptr;
168
+ }
169
+ }
170
+ };
171
+ ```
78
172
173
+ ### ** Go**
174
+
175
+ ``` go
176
+ /* *
177
+ * Definition for a binary tree node.
178
+ * type TreeNode struct {
179
+ * Val int
180
+ * Left *TreeNode
181
+ * Right *TreeNode
182
+ * }
183
+ */
184
+ func removeLeafNodes (root *TreeNode , target int ) *TreeNode {
185
+ p := &TreeNode{0 , root, nil }
186
+ var dfs func (root, prev *TreeNode)
187
+ dfs = func (root, prev *TreeNode) {
188
+ if root == nil {
189
+ return
190
+ }
191
+ dfs (root.Left , root)
192
+ dfs (root.Right , root)
193
+ if root.Left == nil && root.Right == nil && root.Val == target {
194
+ if prev.Left == root {
195
+ prev.Left = nil
196
+ } else {
197
+ prev.Right = nil
198
+ }
199
+ }
200
+ }
201
+ dfs (root, p)
202
+ return p.Left
203
+ }
79
204
```
80
205
81
206
### ** ...**
0 commit comments