// 定义树节点类

namespace 搜索二叉树
{
    public class TreeNode
    {
        public int Value { get; set; }
        public TreeNode Left { get; set; }
        public TreeNode Right { get; set; }
    
        public TreeNode(int value)
        {
            Value = value;
            Left = null;
            Right = null;
        }
    }
    
    // 定义二叉搜索树类
    public class BinarySearchTree
    {
        //定义的根节点
        private TreeNode _root;
    
        // 公开的插入方法入口
        
        //当我们执行了插入子方法时 会去主动调用InsertRecursive方法
        public void Insert(int value)
        {
            _root = InsertRecursive(_root, value);
        }
    
        // 递归插入实现
        /// <summary>
        /// 
        /// </summary>
        /// <param name="node">想插入的树节点</param>
        /// <param name="value">插入的值</param>
        /// <returns></returns>
        private TreeNode InsertRecursive(TreeNode node, int value)
        {
            // 创建新节点并且结束递归
            if (node == null)
            {
                return new TreeNode(value);
            }
    
            // 递归查找插入位置
            if (value < node.Value)
            {
                node.Left = InsertRecursive(node.Left, value);
            }
            else if (value > node.Value)
            {
                node.Right = InsertRecursive(node.Right, value);
            }
    
            return node; // 返回当前节点(处理重复值时直接返回)
        }
    
        // 示例:中序遍历验证树结构
        public void InOrderTraversal()
        {
            InOrderRecursive(_root);
            Console.WriteLine();
        }
    
        private void InOrderRecursive(TreeNode node)
        {
            if (node != null)
            {
                InOrderRecursive(node.Left);
                Console.Write(node.Value + " ");
                InOrderRecursive(node.Right);
            }
        }
    }
    
    // 使用示例
    class Program
    {
        static void Main()
        {
            var bst = new BinarySearchTree();
            int[] values = { 5, 3, 7, 2, 4 };
    
            // 插入数据
            foreach (var val in values)
            {
                bst.Insert(val);
            }
    
            // 验证中序遍历结果(应为升序)
            Console.Write("In-order traversal: ");
            bst.InOrderTraversal();  // 输出: 2 3 4 5 7
        }
    }
}

不会做游戏!