优化对象初始化

BIL*_*ILL 0 c# binary-tree

我有一些课.

class TreeNode
{
    public TreeNode Left;
    public TreeNode Right;
    public int Value;

    public TreeNode(int i)
    {
        Value = i;
    }

    public TreeNode AddLeft(int value)
    {
        Left = new TreeNode(value); ;
        return Left;
    }
    public TreeNode AddRight(int value)
    {
        Right = new TreeNode(value);
        return Right;
    }
    public static int GetSum(TreeNode root)
    {
        if(root.Left == null || root.Right == null) return root.Value;
        return root.Value + GetSum(root.Left) + GetSum(root.Right);
    }
}
class Program
{
    static void Main(string[] args)
    {
        var root = new TreeNode(10);
        var left = root.AddLeft(1);
        left.AddLeft(1);
        left.AddRight(1);
        var right = root.AddRight(1);
        right.AddLeft(1);
        right.AddRight(1);

        int Sum = TreeNode.GetSum(root);
        Console.WriteLine("Sum is :{0}", Sum);

        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

如何简化树初始化,因为如果树很大,很容易混淆?

Dar*_*mas 6

这样的事情:

var root = new TreeNode(10,
    new TreeNode(1,
        new TreeNode(1),
        new TreeNode(1)),
    new TreeNode(1,
        new TreeNode(1),
        new TreeNode(1)));
Run Code Online (Sandbox Code Playgroud)

看起来更清洁,你怎么看?您需要做的就是添加一个新的构造函数:

public TreeNode(int value, TreeNode left, TreeNode right)
{
    Value = value;
    Left = left;
    Right = right;
}
Run Code Online (Sandbox Code Playgroud)


Pop*_*lin 5

除了Daren Thomas的答案,如果你想让初始化更具可读性,你可以使用C#4.0 的命名参数功能

var root = new TreeNode(10,
left: new TreeNode(1,
      left: new TreeNode(1),
      right: new TreeNode(1)),
right: new TreeNode(1,
      left: new TreeNode(1),
      right: new TreeNode(1)));
Run Code Online (Sandbox Code Playgroud)