using System;
using System.Collections.Generic;
using System.Text;namespace BinaryTree
{
class Program
{
static void Main(string[] args)
{
BTree bt = new BTree();
Node parent= null, current = null;
int i = 1;
while(i>0)
{
Console.WriteLine("Input an integer");
i = int.Parse(Console.ReadLine());
bt.find(i, ref parent, ref current);
if (current != null) Console.WriteLine("{0}Already exist!", i);
else
{
bt.addNew(i, parent, current);
Console.WriteLine("{0} inserted!", i);
}
};
return;
}
}
class Node
{
public int ivalue;
public Node lchild;
public Node rchild; public Node(int i, Node l, Node r)
{
ivalue = i;
lchild = l;
rchild = r;
}
}
class BTree
{
public Node ROOT;
public BTree()
{
ROOT = null;
} public bool contain(int element)
{
Node parent = null, currentNode = null;
find(element, ref parent, ref currentNode);
if(currentNode == null) return false;
return true;
}
public bool add(int element)
{
Node tmp, parent = null, currentNode = null;
find(element, ref parent, ref currentNode);
if(currentNode != null)
{
return false; // already there
}
else
{
tmp = new Node(element, null, null);
if(parent == null) // empty tree
ROOT = tmp;
else
if(element<parent.ivalue)
parent.lchild =tmp;
else
parent.rchild = tmp;
}
return true;
} // must make sure that the value is not in the tree
public void addNew(int element, Node parent, Node currentNode)
{
//if(currentNode != null) return false;
Node tmp;
// currentNode should be null
tmp = new Node(element, null, null);
if (parent == null) // empty tree
ROOT = tmp;
else
if (element < parent.ivalue)
parent.lchild = tmp;
else
parent.rchild = tmp;
}
public void find(int element, ref Node parent, ref Node currentNode)
{
currentNode = ROOT;
parent = null;
while ((currentNode != null) && (currentNode.ivalue != element))
{
parent = currentNode;
if (element < currentNode.ivalue) // left
currentNode = currentNode.lchild;
else // right
currentNode = currentNode.rchild;
}
}
}
}
using System.Collections.Generic;
using System.Text;namespace BinaryTree
{
class Program
{
static void Main(string[] args)
{
BTree bt = new BTree();
Node parent= null, current = null;
int i = 1;
while(i>0)
{
Console.WriteLine("Input an integer");
i = int.Parse(Console.ReadLine());
bt.find(i, ref parent, ref current);
if (current != null) Console.WriteLine("{0}Already exist!", i);
else
{
bt.addNew(i, parent, current);
Console.WriteLine("{0} inserted!", i);
}
};
return;
}
}
class Node
{
public int ivalue;
public Node lchild;
public Node rchild; public Node(int i, Node l, Node r)
{
ivalue = i;
lchild = l;
rchild = r;
}
}
class BTree
{
public Node ROOT;
public BTree()
{
ROOT = null;
} public bool contain(int element)
{
Node parent = null, currentNode = null;
find(element, ref parent, ref currentNode);
if(currentNode == null) return false;
return true;
}
public bool add(int element)
{
Node tmp, parent = null, currentNode = null;
find(element, ref parent, ref currentNode);
if(currentNode != null)
{
return false; // already there
}
else
{
tmp = new Node(element, null, null);
if(parent == null) // empty tree
ROOT = tmp;
else
if(element<parent.ivalue)
parent.lchild =tmp;
else
parent.rchild = tmp;
}
return true;
} // must make sure that the value is not in the tree
public void addNew(int element, Node parent, Node currentNode)
{
//if(currentNode != null) return false;
Node tmp;
// currentNode should be null
tmp = new Node(element, null, null);
if (parent == null) // empty tree
ROOT = tmp;
else
if (element < parent.ivalue)
parent.lchild = tmp;
else
parent.rchild = tmp;
}
public void find(int element, ref Node parent, ref Node currentNode)
{
currentNode = ROOT;
parent = null;
while ((currentNode != null) && (currentNode.ivalue != element))
{
parent = currentNode;
if (element < currentNode.ivalue) // left
currentNode = currentNode.lchild;
else // right
currentNode = currentNode.rchild;
}
}
}
}
解决方案 »
- 莫名其妙的 看似很简单的问题 大哥大姐谁给看一下
- 获取html源码问题
- 请教各位兄弟,哪个For XP 的 GPS导航软件好用
- 郁闷,配置文件这么麻烦!
- \000-\037\216#\000这是什么编码格式
- C# WinForm中有没有类似于InputBox的东东
- 【急】哪儿可以找到Visual Studio Tools for the Microsoft Office System英文版下载?
- 【求解】如何将电脑用usb与笔记本电脑连接起来?
- 求oracle达人[200分求助]
- listview控件
- 如何在C#中利用DataGridView控件编辑数据
- 请问一个子窗体怎么控制另一个子窗体的Enabled的属性?
从面向对象思想来说,一个成员的某个属性进行改变的时候,是需要触发某个事件,这点你应该在winform编程里面能体会到。
综上:你的程序很幼稚,继续努力,你能做出非常好的二叉树的。ps:为什么要独立实现二叉树呢?如果实现N叉树不是更好吗?连二叉树都包容进去了
1、类来这么实现就不大好了。在性能方面会有大大的折扣
类的定义并不会产生多大的内存,当你class A;的时候系统只是生成一个句柄而已,当你new的时候生成对象,当你要保存东西的时候,在任何语言都需要内存的支持,所以是一样的。2、数组并不是最好实现二叉树的结构,因为会浪费非常多的空间,因为你要保证你的数组保存的是平衡二叉树才能节省资源,当你要保证节省资源的情况下,你需要生成AVL树,这样你的数组就要频繁的调整而导致性能的问题3、二叉树和N叉树的使用方式是不一样,二叉可以保证你查询的速度,N叉可以保证你查询的深度,所以是两个不同的概念综上:你的想法很幼稚,继续努力,你能理解什么是非常好的二叉树的。