1

我写了这段代码

我有这些错误

无法在 findmin 上将类型 x.Program.TreeNode' 隐式转换为 'int' //

无法在 findmax 上将类型 x.Program.TreeNode' 隐式转换为 'int'

我的主要内容是正确的还是遗漏的?

以及我如何计算节点、叶子并获得高度(只需要提示)

class Program
    {
        static void Main(string[] args)
        {
            BinarySearchTree t = new BinarySearchTree();

            t.insert(ref t.root, 10);
            t.insert(ref t.root, 5);
            t.insert(ref t.root, 6);
            t.insert(ref t.root, 17);
            t.insert(ref t.root, 2);
            t.insert(ref t.root, 3);

            BinarySearchTree.print(t.root);
        }

        public class TreeNode
        {
            public int n;
            public TreeNode _left;
            public TreeNode _right;


            public TreeNode(int n, TreeNode _left, TreeNode _right)
            {
                this.n = n;
                this._left = _left;
                this._right = _right;
            }


            public void DisplayNode()
            {
                Console.Write(n);
            }
        }


        public class BinarySearchTree
        {
            public TreeNode root;

            public BinarySearchTree()
            {
                root = null;
            }


            public void insert(ref TreeNode root, int x)
            {
                if (root == null)
                {
                    root = new TreeNode(x, null, null);
                }
                else
                    if (x < root.n)
                        insert(ref root._left, x);
                    else
                        insert(ref root._right, x);
            }

            public int FindMin()
            {
                TreeNode current = root;

                while (current._left != null)
                    current = current._left;

                return current;
            }

            public int FindMax()
            {
                TreeNode current = root;

                while (current._right != null)
                    current = current._right;

                return current;
            }

            public TreeNode Find(int key)
            {
                TreeNode current = root;

                while (current.n != key)
                {
                    if (key < current.n)
                        current = current._left;
                    else
                        current = current._right;
                    if (current == null)
                        return null;
                }
                return current;
            }



            public void InOrder(ref TreeNode root)
            {
                if (root != null)
                {
                    InOrder(ref root._left);
                    root.DisplayNode();
                    InOrder(ref root._right);
                }
            }


            public static void print(TreeNode root)
            {
                if (root != null)
                {
                    print(root._left);
                    Console.WriteLine(root.n.ToString());
                    print(root._right);
                }

            }
4

2 回答 2

2

既然你需要 ( FindMin/ FindMax) 来返回一个int,你的意思是current.n什么?


更新:为了计算叶子和节点,怎么样(作为实例方法TreeNode):

    public int CountNodes()
    {
        int count = 1; // me!
        if (_left != null) count += _left.CountNodes();
        if (_right != null) count += _right.CountNodes();
        return count;
    }

    public int CountLeaves()
    {
        int count = (_left == null && _right == null) ? 1 : 0;
        if (_left != null) count += _left.CountLeaves();
        if (_right != null) count += _right.CountLeaves();
        return count;
    }

如果我错过了重点,请告诉我...

于 2009-01-02T09:55:36.443 回答
1

Your FindMin() and FindMax() methods are trying to return TreeNode objects but the signature says they returns ints. As it doesn't appear that the methods are used in the program, prehaps you could remove them?

于 2009-01-02T09:57:27.330 回答