什么是二叉树呢?
二叉树在图论中是这样定义的:二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。如图所示:
这就是个一般我们看到的二叉树了。那么我们怎么设计我们自己的二叉树呢??
根据二叉树的定义,一个节点下最多有两个子节点,向上亦是如此。。故我们可以这样来定义我们的节点,因为树是由很多个节点组成的,我们要做的就是把多个节点拼成一棵二叉树。
定义二叉树的节点:
//定义树节点
class TreeNode
{
public int data;
public TreeNode lchild;
public TreeNode rchild;
public TreeNode() { }
public TreeNode(int value, TreeNode l, TreeNode r)
{
this.data = value;
this.lchild = l;
this.rchild = r;
}
}
其中包括一个数据域,以及两个子节点。好了树的节点我们就定义好了,虽然很多个节点就是一棵树了,但是为了更见直观,我们还需要定义一棵“树”,如下所示:
//定义树
class Btree
{
//树节点个数
public int num;
public TreeNode node;
public Btree() { }
public Btree(int count, TreeNode t)
{
this.num = count;
this.node = t;
}
}
简单的来说,这就是一个树的头,里面包括了节点的总个数和根结点。
那么 我们怎么创建一棵树呢??
如定义所示,利用构造函数创建我们的树。
//创建新节点
TreeNode node = new TreeNode();
node.data = 1;
node.lchild = new TreeNode()
{
data = 2,
lchild = new TreeNode() { data = 4, lchild = null, rchild = null },
rchild = new TreeNode(){data = 5, lchild = null, rchild = null}
};
node.rchild = new TreeNode()
{
data = 3,
lchild = new TreeNode() { data = 6, lchild = null, rchild = null }
};
//创建树
Btree bt = new Btree();
bt.num = 6;
bt.node = node;
这样 我们就创建好了一棵树, 那么 问题来了。。。。。我们怎么把这棵树打印出来呢???
遍历节点?? 怎么遍历呢?
下面为大家推荐一个很直观的打印二叉树的办法:
//结构化打印二叉树
public void ShowTree(TreeNode node, int format, int gap, char div)
{
if (node != null)
{
//打印我们定义的结构字符
for (int i = 0; i < format; i++)
{
Console.Write(div);
}
//父节点打印换行
Console.WriteLine(node.data);
if ((node.lchild != null) || (node.rchild != null))
{
//打印子节点
ShowTree(node.lchild, format + gap, gap, div);
ShowTree(node.rchild, format + gap, gap, div);
}
}
else
{
for (int i = 0; i < format; i++)
{
Console.Write(div);
}
Console.WriteLine();
}
}
运行上面的程序如下图所示:
大家有没有看出点什么来呢?? 相信大家好好看一下 还是能看得懂的!!!
好了,二叉树的创建就先讲到这里,下一篇为大家介绍二叉树的插入。。节点的删除。遍历等等。。。