Given a binary tree root
and an integer target
, delete all the leaf nodes with value target
.
Note that once you delete a leaf node with value target
, if it's parent node becomes a leaf node and has the value target
, it should also be deleted (you need to continue doing that until you can't).
Example 1:
Input: root = [1,2,3,2,null,2,4], target = 2 Output: [1,null,3,null,4] Explanation: Leaf nodes in green with value (target = 2) are removed (Picture in left). After removing, new nodes become leaf nodes with value (target = 2) (Picture in center).
Example 2:
Input: root = [1,3,3,3,2], target = 3 Output: [1,3,null,null,2]
Example 3:
Input: root = [1,2,null,2,null,2], target = 2 Output: [1] Explanation: Leaf nodes in green with value (target = 2) are removed at each step.
Example 4:
Input: root = [1,1,1], target = 1 Output: []
Example 5:
Input: root = [1,2,3], target = 1 Output: [1,2,3]
Constraints:
1 <= target <= 1000
- The given binary tree will have between
1
and3000
nodes. - Each node's value is between
[1, 1000]
.
删除给定值的叶子节点。
题意是给一棵二叉树和一个目标值target,请你删除所有node.val == target的叶子节点。
思路是后序遍历。思路跟814题没有区别,可以放在一起做。
时间O(n)
空间O(n)
Java实现
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode() {} 8 * TreeNode(int val) { this.val = val; } 9 * TreeNode(int val, TreeNode left, TreeNode right) { 10 * this.val = val; 11 * this.left = left; 12 * this.right = right; 13 * } 14 * } 15 */ 16 class Solution { 17 public TreeNode removeLeafNodes(TreeNode root, int target) { 18 // corner case 19 if (root == null) { 20 return null; 21 } 22 root.left = removeLeafNodes(root.left, target); 23 root.right = removeLeafNodes(root.right, target); 24 if (root.left == null && root.right == null && root.val == target) { 25 return null; 26 } 27 return root; 28 } 29 }
相关题目
1325. Delete Leaves With a Given Value