331 字
2 分钟
算法之二叉树的剪枝

814. 二叉树剪枝#

给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。

返回移除了所有不包含 1 的子树的原二叉树。

( 节点 X 的子树为 X 本身,以及所有 X 的后代。)

image-20210620151025318

解法:

1.递归

思路:

首先看以下什么情况会移除这个节点,两个条件都必须满足

  1. 这个节点为0
  2. 并且这个节点的左右子树节点,要么子树不存在,要么子树所有节点都为0、

按照上面的点就可以使用递归,这个节点等于0,并且没有左右子树的情况,删除这个节点,

就返回null让他等于父节点左或者右子树

所以我们要去走二叉树的后序遍历,左右中,

这题的重点就是一定要走后序遍历,先去判断左右节点

/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var pruneTree = function (root) {
if (!root) {
return root
}
return getNode(root)
};
function getNode(node) {
if (node.left) {
node.left = getNode(node.left)
}
if (node.right) {
node.right = getNode(node.right)
}
if (!node.left && !node.right && node.val === 0) {
return null
}
return node
}
算法之二叉树的剪枝
https://nollieleo.github.io/posts/算法之二叉树的剪枝/
作者
翁先森
发布于
2021-06-20
许可协议
CC BY-NC-SA 4.0