.net 数据结构与算法基础:二叉树
来源:互联网 发布:淘宝直播间申请 编辑:程序博客网 时间:2024/05/17 03:27
二叉树简介
在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。
二叉查找树
二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;
C#添加二叉查找树
算法步骤:
1)创建根节点,并将根节点设为空。
2)判断当前插入节点,若此时根节点为空将其设为根节点,否则执行第三步。
3)将根节点设置为当前点,判断节点与当前点大小关系,若小于当前点,则将根节点左节点设为当前点,若当前点为空,则将待插入节点插入当前点,否则执行第四步。若大于当前点,则将根节点右节点设为当前点,若当前点为空,则将待插入节点插入当前点,否则执行第四步。
4)进行新一轮循环查找。
5)当找到插入节点位置(父节点的左节点或是右节点为空),退出循环。
算法程序:
public void Insert(int i)
{
Node newNode=new Node();
newNode.Data=i;
if (root == null) //判断根节点是否为空
{
root = newNode;
}
else
{
Node current = root;
Node parent;
while (true) //循环查找插入位置
{
parent = current;
if (i < current.Data) //小于当前节点
{
current = current.Left; //将左节点作为当前节点
if (current == null)
{
parent.Left = newNode; //获得插入位置
break; //退出循环
}
}
else
{
current = current.Right;
if (current == null)
{
parent.Right = newNode;
break;
}
}
}
}
}
{
Node newNode=new Node();
newNode.Data=i;
if (root == null) //判断根节点是否为空
{
root = newNode;
}
else
{
Node current = root;
Node parent;
while (true) //循环查找插入位置
{
parent = current;
if (i < current.Data) //小于当前节点
{
current = current.Left; //将左节点作为当前节点
if (current == null)
{
parent.Left = newNode; //获得插入位置
break; //退出循环
}
}
else
{
current = current.Right;
if (current == null)
{
parent.Right = newNode;
break;
}
}
}
}
}
二叉树遍历
中序遍历:
protected void InOrde(Node node)
{
InOrde(node.Left);
node.DispalyNode();
InOrde(node.Right);
}
{
InOrde(node.Left);
node.DispalyNode();
InOrde(node.Right);
}
后序遍历:
public void PostOrder(Node node)
{
if (node != null)
{
InOrder(node.Left);
InOrder(node.Right);
node.DispalyNode();
}
}
{
if (node != null)
{
InOrder(node.Left);
InOrder(node.Right);
node.DispalyNode();
}
}
先序遍历:
public void PreOrder(Node node)
{
if (node != null)
{
node.DispalyNode();
InOrder(node.Left);
InOrder(node.Right);
}
}
{
if (node != null)
{
node.DispalyNode();
InOrder(node.Left);
InOrder(node.Right);
}
}
程序结果:
代码下载:http://download.csdn.net/detail/xiang__jiangsu/4804787
- .net 数据结构与算法基础:二叉树
- 数据结构基础算法-二叉树
- 【数据结构与算法基础】二叉查找树 / Binary Search Tree
- 【数据结构与算法】二叉树
- 数据结构与算法-二叉树
- 算法与数据结构 - 二叉树
- 数据结构与算法:二叉树
- 数据结构与算法:二叉树
- 数据结构与算法-二叉树
- .net 数据结构与算法基础:Hashtable
- .net 数据结构与算法基础:泛型链表使用
- .net 数据结构与算法基础:高级排序
- 算法基础---数据结构---树和二叉树
- 数据结构基础(16) --树与二叉树
- 数据结构基础(16) --树与二叉树
- 数据结构基础(16) --树与二叉树
- [数据结构与算法]二叉树与二叉树遍历
- 数据结构与算法(C#实现)---二叉树
- 内存泄露检测
- CRT堆
- 模拟银行系统(单用户操作)
- vijos p1627(看樱花)
- 关于linux 下man命令学习总结
- .net 数据结构与算法基础:二叉树
- Multipath 配置文件详解及聚合后使用fdisk -l 查看结果的详解
- 解决oracle00054错误
- iOS并发编程指南
- quartz任务调度框架的简单使用
- launcher
- Visual Studio中Debug模式中的inline函数对效率的影响
- VirtualBox-“please use a kernel appropriate for your cpu”
- Xcode的控制台调试命令