当前位置: 首页 > news >正文

面试算法47:二叉树剪枝

题目

一棵二叉树的所有节点的值要么是0要么是1,请剪除该二叉树中所有节点的值全都是0的子树。例如,在剪除图8.2(a)中二叉树中所有节点值都为0的子树之后的结果如图8.2(b)所示。
在这里插入图片描述

分析

下面总结什么样的节点可以被删除。首先,这个节点的值应该是0。其次,如果它有子树,那么它的子树的所有节点的值都为0。也就是说,如果一个节点可以被删除,那么它的子树的所有节点都可以被删除。

由此发现,后序遍历最适合用来解决这个问题。如果用后序遍历的顺序遍历到某个节点,那么它的左右子树的节点一定已经遍历过了。每遍历到一个节点,就要确定它是否有左右子树,如果左右子树都是空的,并且节点的值是0,那么也就可以删除这个节点。

public class Test {public static void main(String[] args) {TreeNode node1 = new TreeNode(1);TreeNode node0 = new TreeNode(0);TreeNode node00 = new TreeNode(00);TreeNode node000 = new TreeNode(000);TreeNode node0000 = new TreeNode(0000);TreeNode node00000 = new TreeNode(00000);TreeNode node11 = new TreeNode(1);node1.left = node0;node1.right = node00;node0.left = node000;node0.right = node0000;node00.left = node00000;node00.right = node11;TreeNode result = pruneTree(node1);System.out.println(result);}public static TreeNode pruneTree(TreeNode root) {if (root == null) {return root;}root.left = pruneTree(root.left);root.right = pruneTree(root.right);if (root.left == null && root.right == null && root.val == 0) {return null;}return root;}
}
http://www.lryc.cn/news/218129.html

相关文章:

  • 云安全-云原生k8s攻击点(8080,6443,10250未授权攻击点)
  • 性能压力测试主要目标及步骤
  • VLAN与配置
  • API接口安全设计
  • 服务器的管理口和业务口
  • 【gpt redis】原理篇
  • python二次开发Solidworks:排雷以及如何排雷?
  • 广告引擎检索技术快速学习
  • Scala的类和对象
  • SQL中 <>(不等于)运算符只会匹配那些具有非空值的记录
  • 冒泡排序(Java)
  • k8s集群调度
  • Scala中类的继承、抽象类和特质
  • 小程序如何实现登录数据持久化
  • Maven本地配置获取nexus私服的依赖
  • 第02章-变量与运算符
  • SpringBoot数据响应、分层解耦、三层架构
  • go测试库之apitest
  • K8S删除资源后一直处于Terminating状态无法删除解决方法
  • jvm实践
  • redis-plus-plus访问REDIS集群
  • python把Word题库转成Excle题库
  • 算法通关村第六关-白银挑战树
  • 【Java对象】一文读懂 Java 对象庐山真面目及指针压缩
  • leetcode做题笔记210. 课程表 II
  • 【深度学习 AIGC】stable diffusion webUI 使用过程,参数设置,教程,使用方法
  • 论文阅读 - Detecting Social Bot on the Fly using Contrastive Learning
  • PaddleMIX学习笔记(1)
  • 【网络协议】聊聊HTTPS协议
  • 2023.11.2事件纪念