2022-03-08:给定一棵树的头节点head, 请按照题意,保留节点,没有保留的节点删掉。 树调整完之后,返回头节点。
2022-03-08:给定一棵树的头节点head,
请按照题意,保留节点,没有保留的节点删掉。
树调整完之后,返回头节点。
答案2022-03-08:
递归。当前节点描黑或者子节点描黑,那就保留;否则不保留。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
n1 := NewNode(1, false)
n2 := NewNode(2, true)
n3 := NewNode(3, false)
n4 := NewNode(4, false)
n5 := NewNode(5, false)
n6 := NewNode(6, true)
n7 := NewNode(7, true)
n8 := NewNode(8, false)
n9 := NewNode(9, false)
n10 := NewNode(10, false)
n11 := NewNode(11, false)
n12 := NewNode(12, false)
n13 := NewNode(13, true)
n1.nexts = append(n1.nexts, n2)
n1.nexts = append(n1.nexts, n3)
n2.nexts = append(n2.nexts, n4)
n2.nexts = append(n2.nexts, n5)
n3.nexts = append(n3.nexts, n6)
n3.nexts = append(n3.nexts, n7)
n6.nexts = append(n6.nexts, n8)
n6.nexts = append(n6.nexts, n9)
n6.nexts = append(n6.nexts, n10)
n7.nexts = append(n7.nexts, n11)
n7.nexts = append(n7.nexts, n12)
n9.nexts = append(n9.nexts, n13)
head := retain(n1)
preOrderPrint(head)
}
type Node struct {
// 值
value int
// 是否保留
retain bool
// 下级节点
nexts []*Node
}
func NewNode(v int, r bool) *Node {
ans := &Node{}
ans.value = v
ans.retain = r
ans.nexts = make([]*Node, 0)
return ans
}
// 给定一棵树的头节点head
// 请按照题意,保留节点,没有保留的节点删掉
// 树调整完之后,返回头节点
func retain(x *Node) *Node {
if len(x.nexts) == 0 {
if x.retain {
return x
} else {
return nil
}
}
// x下层有节点
newNexts := make([]*Node, 0)
for _, next := range x.nexts {
newNext := retain(next)
if newNext != nil {
newNexts = append(newNexts, newNext)
}
}
// x.nexts 老的链表,下级节点
// newNexts 新的链表,只有保留的在里面
//
if len(newNexts) > 0 || x.retain {
x.nexts = newNexts
return x
}
return nil
}
// 先序打印
func preOrderPrint(head *Node) {
fmt.Println(head.value)
for _, next := range head.nexts {
preOrderPrint(next)
}
}
执行结果如下:

2022-03-08:给定一棵树的头节点head, 请按照题意,保留节点,没有保留的节点删掉。 树调整完之后,返回头节点。的更多相关文章
- hdu6035 Colorful Tree 树形dp 给定一棵树,每个节点有一个颜色值。定义每条路径的值为经过的节点的不同颜色数。求所有路径的值和。
/** 题目:hdu6035 Colorful Tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:给定一棵树,每个节点有一个颜色值.定 ...
- switch结构2016/03/08
Switch 03/08 一.结构 switch(){ case *: ;break;……default: ;brek;} 练习:输入一个日期,判断这一年第几天? Console.Write(&q ...
- http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
- ant 介绍 http://blog.csdn.net/sunjavaduke/archive/2007/03/08/1523819.aspx
转自: 本内容包含了Ant的历史简要介绍,Ant的功能以及Ant框架的介绍,并对下载安装使用Ant进行了示例介绍,同时通过一个Java程序讲解了Ant的基本使用方法. 1. Ant简介:这 ...
- [Weekly] 2014.03.01-2014.03.08
这周写过好多东西,虽然还没有完全弄明白线段树,但是progress还是有的! 不过有时候真的很想哭,因为自己的梦想连别人看看韩剧.无所事事还要分量轻,实在不明白政治课的Teamwork意义何在,花两分 ...
- 2022.11.08 NOIP2022 模拟赛五
「LibreOJ NOIP Round #1」DNA 序列 注意到 \(k=10\),\(|\Sigma|=4\),故本质不同的子串个数只有 \(4^{10}\) 种,可以直接压位存下来. 时间复杂度 ...
- 打开自定义链接新窗口(safari JS prompt的坑!)2016.03.08
很简单的一个小练习,但做的过程中发现safari的一个坑,使用prompt()方法的时候,点击取消和不输入一样,会返回空字符' ',而不是null! 要求: 制作新按钮,"新窗口打开网站&q ...
- 2018/03/08 每日一个Linux命令 之 chattr/lsattr
每日一个Linux命令 2018-03-08 Linux 命令 chattr/lsattr chattr [-参数] [+/-属性] [文件或者目录] 经过今天没有对铃,粥熬糊了,我就知道...... ...
- 2018/03/08 每日一学PHP 之 常量defind 和 const区别
常量defind 和 const区别 什么是常量? 如字面理解的,在脚本执行期间不可改变的的量. 定义一个常量应该注意的事项? 1:常量默认大小写敏感,错误的大小写不会被识别为常量. 2:常量只能是标 ...
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
随机推荐
- 学习记录--C++多态性简答+编程题
#include<iostream> #include<string> //双目运算符:运算符作用域两个操作数 //定义一个复数类,重载"+",作为复数类的 ...
- 学习记录--C++文件读入与存储
C++中对文件操作需要包含头文件<fstream> 操作文件的三大类:1.ofstream写操作 2.ifstream读操作 3.fstream读写操作 一.写文件步骤 1.包含头文件 # ...
- 一文快速回顾 Session 和 Cookie
前言 在 Web 应用程序中(通俗点,可以理解成一个网站),Session 和 Cookie 是两个非常重要的概念,主要用于实现用户身份认证.数据传递等功能.今天就来讲讲这两个东西. 对于当时刚开始接 ...
- 网络安全(中职组)-B模块:暴力破解
任务环境说明: 服务器场景名称:sql008 服务器场景用户名:administrator:密码:未知(封闭靶机) 1.使用渗透机场景kali中工具扫描服务器场景,将iis的版本号作为flag提交: ...
- mybatis-plus 开发环境在控制台打印日志
参考博客:https://blog.csdn.net/qq_32929057/article/details/109291919 # 注意在生产环境注释掉 mubatis-plus: configur ...
- Hello, YOU -- 通过简单的 hello_test.go 程序理解并学会编写测试
Hello, YOU 书接上文上篇文章中,我们尝试编写了hello word 函数以及第一个测试 hello_test package main import "fmt" func ...
- 音频和视频流最佳选择?SRT 协议解析及报文识别
我们所知道 SRT 是由 Haivision 和 Wowza 开发的开源视频流协议.很多人会认为在不久的将来,它被是 RTMP 的替代品.因为 RTMP 协议安全性稍低,延迟相对较高 ,而相对于 SR ...
- wsl 中 docker-compose 搭建 kafka 集群出现的外部访问错误
在 wsl 中用 docker-compose 搭建了一台 zookeeper + 三台 broker 的 kafka 集群,使用的镜像是 bitnami/kafka,在按照镜像文档运行容器后,发现运 ...
- Java 安全指南
Java 安全指南 后台类 I. 代码实现 1.1 数据持久化 1.1.1[必须]SQL语句默认使用预编译并绑定变量 Web后台系统应默认使用预编译绑定变量的形式创建sql语句,保持查询语句和数据相分 ...
- 垃圾回收之三色标记法(Tri-color Marking)
关于垃圾回收算法,基本就是那么几种:标记-清除.标记-复制.标记-整理.在此基础上可以增加分代(新生代/老年代),每代采取不同的回收算法,以提高整体的分配和回收效率. 无论使用哪种算法,标记总是必要的 ...