gpt4 book ai didi

c# - 为什么我在二叉搜索树中找不到 left 和 right?

转载 作者:行者123 更新时间:2023-11-30 22:50:49 24 4
gpt4 key购买 nike

我在使用以下代码片段时遇到问题:

using System;
using System.Collections.Generic;
using System.Text;

namespace trees_by_firas
{
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);
Console.WriteLine("--------------------");
Console.WriteLine(t.FindMax());
Console.WriteLine(t.FindMin());
Console.WriteLine("--------------------");
Console.WriteLine(t.CountLeaves());
Console.WriteLine(t.CountNodes());



}

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.n;
}

public int FindMax()
{
TreeNode current = root;

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

return current.n;
}



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 int CountNodes()
{
int count = 1; // me!
if (root._left != null)
count += _left.CountNodes();
if (root._right != null)
count += _right.CountNodes();
return count;
}

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

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

}



}

}
}

我收到以下错误:

Error 1 The name '_left' does not exist in the current context 

// on the countnodes & countleaves

Error 2 The name '_right' does not exist in the current context
// on the countnodes & countleaves

关于如何修复这些错误有什么想法吗?

最佳答案

_left 和_right 是TreeNode 中的字段。您正在尝试使用它们,就好像它们是 BinarySearchTree 的一部分一样。我相信你可以在它们前面加上 root.:

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

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

关于c# - 为什么我在二叉搜索树中找不到 left 和 right?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/406791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com