814.二叉树剪枝
https://leetcode-cn.com/problems/binary-tree-pruning
题目描述
思路
用【产品经理法】的思维来解决递归问题。
产品
假设我们已经有了一个 pruneTree
方法,可以把一棵树中不包含 1
的枝节删掉。
子问题
明显是 pruneTree(root.left)
和 pruneTree(root.right)
。
大小问题的关系
首先,对于 root
,我们用 pruneTree(root.left)
和 pruneTree(root.right)
的结果分别替换掉原本的 root.left
和 root.right
。接着,再决定当前这棵树要不要保留。
如果此时左右子树有一个不为空的话,那说明这棵树是要保留的,直接返回
root
就行。如果左右子树都为空,那我们就判断
root.val
的值,等于 1 就返回root
,等于 0 就返回null
把这棵树移除。
递归出口
空节点直接返回 null
就行。
代码
TypeScript Code
复杂度分析
时间复杂度:$O(N)$,N 为二叉树节点数。
空间复杂度:$O(H)$,H 为二叉树的高度,递归栈的最大空间。
Last updated
Was this helpful?