331 字
2 分钟
算法之二叉树的剪枝
814. 二叉树剪枝
给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。
返回移除了所有不包含 1 的子树的原二叉树。
( 节点 X 的子树为 X 本身,以及所有 X 的后代。)

解法:
1.递归
思路:
首先看以下什么情况会移除这个节点,两个条件都必须满足
- 这个节点为0
- 并且这个节点的左右子树节点,要么子树不存在,要么子树所有节点都为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}