LeetCode.CommunityToolKit 4.1.4

dotnet add package LeetCode.CommunityToolKit --version 4.1.4
NuGet\Install-Package LeetCode.CommunityToolKit -Version 4.1.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LeetCode.CommunityToolKit" Version="4.1.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add LeetCode.CommunityToolKit --version 4.1.4
#r "nuget: LeetCode.CommunityToolKit, 4.1.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install LeetCode.CommunityToolKit as a Cake Addin
#addin nuget:?package=LeetCode.CommunityToolKit&version=4.1.4

// Install LeetCode.CommunityToolKit as a Cake Tool
#tool nuget:?package=LeetCode.CommunityToolKit&version=4.1.4

LeetCode.CommunityToolKit社区工具包

LeetCode C#刷算法题快速工具包

  1. LeetCode C#刷算法题快速工具包 1、帮助您在编写算法是不必自己创建TreeNode类、Node类、ListNode类;

Definition

Namespace: LeetCode.CommunityToolKit Assembly: LeetCode.CommunityToolKit.dll 11

Examples

  • 代码
using System;
using System.Collections.Generic;
using System.Linq;
using LeetCode.CommunityToolKit.Models;;

namespace LeetCode
{
    /// <summary>
    /// 897. 递增顺序搜索树
    /// https://leetcode.cn/problems/increasing-order-search-tree/
    /// </summary>
    public class Solution897
    {

        List<int> list = new List<int>();
        Stack<TreeNode> stack = new Stack<TreeNode>();
        public TreeNode IncreasingBST(TreeNode root)
        {
            DFS(root);
            Array.ForEach(list.ToArray(), (x) =>
            {
                if (stack.Count > 0)
                {
                    var node = stack.Peek();
                    var right = new TreeNode(x);
                    node.right = right;
                    stack.Push(right);
                }
                else
                {
                    stack.Push(new TreeNode(x));
                }
            });
            var r = stack.Last();
            return r;
        }

        public void DFS(TreeNode root)
        {
            if (root == null)
                return;

            if (root.left != null)
                DFS(root.left);
            list.Add(root.val);
            if (root.right != null)
                DFS(root.right);
        }
    }
}


  • 单元测试
    [TestMethod()]
    [DataRow(new object?[] { 5, 3, 6, 2, 4, null, 8, 1, null, null, null, 7, 9 },"", new object?[] { 1, null, 2, null, 3, null, 4, null, 5, null, 6, null, 7, null, 8, null, 9 })]
    public void IncreasingBSTTest(object?[] array,string empty, object?[] exp)
    {
        //empty占位符,否则参数无法匹配
        var expected = exp.CreateTree();
        var node = array.CreateTree();
        //Act
        var actual = new Solution897().IncreasingBST(node);
        //二叉树中序遍历拓展方法
        var a = actual.InorderTraversal();
        //Assert 重写二叉树.Equals方法
        Assert.IsTrue(expected.Equals(actual), "You are wrong!!!");

    }

Remarks

LeetCode C#刷算法题快速工具包

  • 帮助您在编写算法是不必自己创建TreeNode类;
  • 快速单元测试 快速将object?[]初始化TreeNode对象,与LeetCode无缝对接;
  • 快速单元测试 重写了Equals方法判断两树是否相等;

Constructors

public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null)

Properties

public int val { get;  }
public TreeNode left { get; set; }
public TreeNode right { get; set; }

Methods

  1. 前序遍历数组转二叉树
 public static TreeNode CreateTree(this object[] arr)
  1. 返回二叉树前序遍历
public IList<int> PreorderTraversal(TreeNode root)

  1. 返回二叉树中序遍历
public IList<int> InorderTraversal(TreeNode root)
  1. 返回二叉树后序遍历
public IList<int> PostorderTraversal(TreeNode root)
  1. 二叉树是否相等
public override bool Equals(object? obj)
  1. 判断两列表是否相等
public static void SequenceEqual(this Assert assert, IList<object> list1, IList<object> list2, string msg)
public static void SequenceEqual2(this Assert assert, IList<IList<int>> list1, IList<IList<int>> list2, string msg)

  • Examples

LeetCode103

namespace LeetCode
{
   public  class Solution103 
   {
       public IList<IList<int>> ZigzagLevelOrder(TreeNode root)
       {
           var res = new List<IList<int>>();
           if (root == null) return res;
           bool isToRight = true;
           var queue = new Queue<TreeNode>();
           queue.Enqueue(root);
           while (queue.Count > 0)
           {
               var count = queue.Count;
               var level = new int[count];
               while (count > 0)
               {
                   var node = queue.Dequeue();
                   level[isToRight ? (level.Length - count) : (count - 1)] = node.val;
                   count--;
                   if (node.left != null)
                   {
                       queue.Enqueue(node.left);
                   }

                   if (node.right != null)
                   {
                       queue.Enqueue(node.right);
                   }
               }
               res.Add(level.ToList());
               isToRight = !isToRight;
           }
           return res;
       }
   }
}

单元测试

using LeetCode.CommunityToolKit.Tests;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;

namespace LeetCode.Tests
{
   [TestClass()]
   public class Solution103Tests
   {
       [TestMethod()]
       [DataRow(new object[]{ 3, 9, 20, null, null, 15, 7 } )]
       public void ZigzagLevelOrderTest(object[] array)
       {
           //Arrange 
           var expected =
               new List<IList<int>> {new List<int>() {3}, new List<int>() {20, 9}, new List<int>() {15, 7}};
           //Act
           var actual = new Solution103().ZigzagLevelOrder(array.CreateTree());

           //Assert
          
           //方法1:拓展方法,对函数返回结果便捷单元测试
           Assert.That.SequenceEqual2(expected, actual, "You are wrong!!!");
           //方法2:各种判断非常复杂而且不准确
            for (int i = 0; i < actual.Count; i++)
           {
               Assert.IsTrue(expected[i].SequenceEqual(actual[i]));
           }
           Assert.AreEqual(expected.Count, expected.Count, "You are wrong!!!");
           var typ = expected.GetType();
           Assert.IsInstanceOfType(actual, typ);

       }
   }
}

升级说明

版本 新增功能 日期
4.1.4 Node实例相等断言 2022-07-14
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on LeetCode.CommunityToolKit:

Package Downloads
LeetCode.Test.CommunityToolKit

LeetCode C#刷算单元测试社区工具包MSTest单元测试拓展工具包 1.Assert 集合相等拓展方法Assert.That.SequenceEqual2;2.判断两二叉树是否相等Assert.That.TreeNodeEqual

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.1.4 870 7/14/2022
4.1.3 395 7/12/2022
4.1.2 808 6/30/2022