【算法】根据二叉树的级别返回排序后的元素列表

算法,根据,二叉树,级别,返回,排序,元素,列表 · 浏览次数 : 4

小编点评

```csharp public class Node { public Node Left; public Node Right; public int Value; public Node(Node l, Node r, int v) { Left = l; Right = r; Value = v; } } public class Kata { public static List TreeByLevels(Node root) { List result = new List(); Queue queue = new Queue(); queue.Enqueue(root); while (queue.Count > 0) { Node node = queue.Dequeue(); result.Add(node.Value); if (node.Left != null) queue.Enqueue(node.Left); if (node.Right != null) queue.Enqueue(node.Right); } return result; } } ``` **测试用例:** ```csharp // 单个节点 [Test] public void SingleNodeTest() { Assert.AreEqual(new List() { 1 }, Kata.TreeByLevels(new Node(null, null, 1))); } // 左倾斜树 [Test] public void LeftSkewedTreeTest() { Assert.AreEqual(new List() { 1, 2, 3, 4, 5 }, Kata.TreeByLevels(new Node(new Node(null, null, 4), null, 2), null, 1)); } // 右倾斜树 [Test] public void RightSkewedTreeTest() { Assert.AreEqual(new List() { 1, 2, 3, 4, 5 }, Kata.TreeByLevels(new Node(null, new Node(null, new Node(null, null, 5), 3), 1)); } // 完全二叉树 [Test] public void CompleteBinaryTreeTest() { Assert.AreEqual(new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, Kata.TreeByLevels(new Node(23, new Node(new Node(null, null, 4), new Node(null, null, 5), 2), 24, new Node(new Node(null, null, 6), new Node(null, null, 7), 3), 25, 1))); } // 空节点 [Test] public void SkewedTreeWithNullNodesTest() { Assert.AreEqual(new List() { 1, 2, 3, 4, 5 }, Kata.TreeByLevels(new Node(32, null, null, 2), 33, null, 34, 1)); } ```

正文

根据给定的Node树节点,返回包含按级别排序的树中元素的列表,这意味着根元素位于第一位,然后根子元素(从左到右)位于第二位和第三位,依此类推。

 1 public class Node
 2 {
 3     public Node Left;
 4     public Node Right;
 5     public int Value;
 6     
 7     public Node(Node l, Node r, int v)
 8     {
 9         Left = l;
10         Right = r;
11         Value = v;
12     }
13 }
14 
15 示例1 :
16 
17                  2
18             8        9
19           1  3     4   5
20 需要返回list:
21 
22 [2,8,9,1,3,4,5]
23 示例2 :
24 
25                  1
26             8        4
27               3        5
28                          7
29 需要返回list:
30 
31 [1,8,4,3,5,7]

 


算法实现:

 1 using System;
 2 using System.Collections.Generic;
 3 
 4 public class Kata
 5 {
 6     public static List<int> TreeByLevels(Node root)
 7     {
 8         List<int> result = new List<int>();
 9 
10         if (root == null)
11             return result;
12 
13         Queue<Node> queue = new Queue<Node>();
14         queue.Enqueue(root);
15 
16         while (queue.Count > 0)
17         {
18             Node node = queue.Dequeue();
19             result.Add(node.Value);
20 
21             if (node.Left != null)
22                 queue.Enqueue(node.Left);
23             if (node.Right != null)
24                 queue.Enqueue(node.Right);
25         }
26 
27         return result;
28     }
29 }

测试用例:

 1 [Test]
 2 public void SingleNodeTest()
 3 {
 4     Assert.AreEqual(new List<int>() { 1 }, Kata.TreeByLevels(new Node(null, null, 1)));
 5 }
 6 
 7 [Test]
 8 public void LeftSkewedTreeTest()
 9 {
10     Assert.AreEqual(new List<int>() { 1, 2, 3, 4, 5 }, Kata.TreeByLevels(new Node(new Node(new Node(null, null, 4), null, 2), null, 1)));
11 }
12 
13 [Test]
14 public void RightSkewedTreeTest()
15 {
16     Assert.AreEqual(new List<int>() { 1, 2, 3, 4, 5 }, Kata.TreeByLevels(new Node(null, new Node(null, new Node(null, null, 5), 3), 1)));
17 }
18 
19 [Test]
20 public void CompleteBinaryTreeTest()
21 {
22     Assert.AreEqual(new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, Kata.TreeByLevels(new Node(
23         new Node(new Node(null, null, 4), new Node(null, null, 5), 2),
24         new Node(new Node(null, null, 6), new Node(null, null, 7), 3),
25         1)));
26 }
27 
28 [Test]
29 public void SkewedTreeWithNullNodesTest()
30 {
31     Assert.AreEqual(new List<int>() { 1, 2, 3, 4, 5 }, Kata.TreeByLevels(new Node(
32         new Node(null, null, 2),
33         null,
34         1)));
35 }
36 
37 /*这些测试用例覆盖了一些特殊情况,包括:
38 
39 - 单个节点的情况;
40 - 左倾斜的树(即只有左子树的树)的情况;
41 - 右倾斜的树(即只有右子树的树)的情况;
42 - 完全二叉树的情况;
43 - 包含空节点(null)的树的情况。
44 
45 通过这些测试用例,可以验证算法在各种情况下的正确性和鲁棒性。*/

 

与【算法】根据二叉树的级别返回排序后的元素列表相似的内容:

【算法】根据二叉树的级别返回排序后的元素列表

根据给定的Node树节点,返回包含按级别排序的树中元素的列表,这意味着根元素位于第一位,然后根子元素(从左到右)位于第二位和第三位,依此类推。 1 public class Node 2 { 3 public Node Left; 4 public Node Right; 5 public int

【算法】根据整数数组,生成正的素因子二维数组,并排序

给定一个正整数或负整数的数组,I=[i1,..,in] 生成一个形式为的排序数组P [[p,I数组的所有ij的和,其中p是ij的素因子(p为正)]…] P将按素数的递增顺序进行排序。 示例: I={12,15};//结果=“(2 12)(3 27)(5 15)” [2,3,5]是I的元素的所有素因子

软件设计模式系列之二十三——策略模式

策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时动态选择算法的行为。这意味着你可以定义一系列算法,将它们封装成独立的策略对象,然后根据需要在不修改客户端代码的情况下切换这些算法。策略模式有助于解决问题领域中不同行为的变化和扩展,同时保持代码的灵活性和可维护性。

【算法】根据输入的正整数,重新排列生成一个更大的数字

需求:创建一个函数,该函数取一个正整数,并返回下一个较大的数字,该数字可以通过重新排列其数字来形成。例如: 12 >21 513==>531 2017 >2071 如果数字不能重新排列以形成更大的数字,则返回-1: 9 >-1 111=>-1 531=>-1

【算法】根据输入的整数数组,以范围格式返回格式正确的字符串。

输入是一种整数有序数组的格式,使用逗号分隔 单个整数或由起始整数表示的整数范围,起始整数与结束整数之间用短划线“-”分隔。范围包括数值区间中的所有整数,包括两个端点。除非它至少跨越3个数字,否则它不被视为一个范围。例如“12,13,15-17”表示数值范围。 完成解决方案,使输入数组按递增顺序获取整

【算法】数学之旅,根据素数特征寻找底数

当下午六点的钟声敲响,小悦如常地结束了一天的工作。她坐在工位上,脑海中不禁回想起自己学习数学的过程。那些数字、公式以及那些漫长夜晚的努力,都像是一段迷人的旋律,让她无法忘怀。当她沉浸在回忆中时,那迷人的微笑映入了旁人的眼帘,而这一幕恰好被一位同事捕捉到。 “你在笑什么呢?”同事好奇地问道。 “哦,没

[转帖]nginx的ip_hash算法

概念 根据用户请求的ip,利用算法映射成hash值,分配到特定的tomcat服务器中。主要是为了实现负载均衡,只要用户ip固定,则hash值固定,特定用户只能访问特定服务器,解决了session的问题。 源码分析 ip_hash算法的处理代码位于src\http\modules\ngx_http_u

DDP:微软提出动态detection head选择,适配计算资源有限场景 | CVPR 2022

DPP能够对目标检测proposal进行非统一处理,根据proposal选择不同复杂度的算子,加速整体推理过程。从实验结果来看,效果非常不错 来源:晓飞的算法工程笔记 公众号 论文: Should All Proposals be Treated Equally in Object Detectio

弹性伸缩:高可用架构利器(架构+算法+思维)

1 介绍 云计算资源弹性伸缩是一种根据业务需求动态调整计算资源规模的技术。它可以根据系统的性能指标(如CPU使用率、内存占用率、磁盘IO、网卡读写率、请求响应时间等)或者预定义的规则(如时间周期、业务事件等),自动增加或减少计算资源的数量,以满足业务负载的变化。这种技术可以确保系统在高峰时期拥有足够

物以类聚人以群分,通过GensimLda文本聚类构建人工智能个性化推荐系统(Python3.10)

众所周知,个性化推荐系统能够根据用户的兴趣、偏好等信息向用户推荐相关内容,使得用户更感兴趣,从而提升用户体验,提高用户粘度,之前我们曾经使用协同过滤算法构建过个性化推荐系统,但基于显式反馈的算法就会有一定的局限性,本次我们使用无监督的Lda文本聚类方式来构建文本的个性化推荐系统。 推荐算法:协同过滤