欲买桂花同载酒,荒泷天下第一斗。|

janbar

园龄:4年6个月 粉丝:29 关注:10

2020-09-20 10:32 阅读 218 评论 0 推荐

翻转二叉树

1.递归

当前节点不为空则交换左右子节点,递归非常直观。

copy
func invertTree1(root *TreeNode) *TreeNode { if root != nil { root.Left, root.Right = invertTree1(root.Right), invertTree1(root.Left) } return root }

2.循环,队列存储(BFS,非递归)

该方法类似树的层次遍历,出队元素交换左右子节点,当前节点左右不为空则入队。

copy
func invertTree2(root *TreeNode) *TreeNode { if root == nil { return nil } queue := []*TreeNode{root} for len(queue) != 0 { cur := queue[0] queue = queue[1:] cur.Left, cur.Right = cur.Right, cur.Left if cur.Left != nil { queue = append(queue, cur.Left) } if cur.Right != nil { queue = append(queue, cur.Right) } } return root }

3.循环,栈存储(DFS,非递归)

其实给我的感觉和BFS差不多,只是每次取栈顶元素交换左右子节点,当前节点左右子节点不为空则入栈。

copy
func invertTree3(root *TreeNode) *TreeNode { if root == nil { return nil } stack := []*TreeNode{root} for { ls := len(stack) - 1 if ls < 0 { break } cur := stack[ls] stack = stack[:ls] cur.Left, cur.Right = cur.Right, cur.Left if cur.Left != nil { stack = append(stack, cur.Left) } if cur.Right != nil { stack = append(stack, cur.Right) } } return root }

4.总结

    本题其实非常简单,只需要遍历每一个节点,然后把该节点的左右子节点进行交换即可。遍历所有节点的方法那可就多了。

posted @   janbar  阅读(218)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~

FAVOURITE

点击右上角即可分享
微信分享提示
*✧⁺˚⁺ପ(๑・ω・)੭ु⁾⁾ 好好学习天天向上
进入亮色模式
进入亮色模式

FAVOURITE