向TREE—INSERT的一个递归版本致敬
2017-03-06 16:12
113 查看
递归尽管效率不高,耗内存,但是对于程序猿来说,写少很多代码,初学者会很喜欢的
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/mad.gif)
下面来看一下实现的过程:
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
void TREE_INSERT(struct *x, struct *z)
{
static struct Tree *y = NULL;//一直是指向x的父节点,由于x为根节点,所以根节点
//的父节点为NULL;
static struct Tree *root = x;
//首先考虑根节点
if (x->key != NULL)
{
y = x;
if (z->key < x->key)
{
TREE_INSERT(struct x->lchild, struct z) //传进来的准确来说应该是个地址
}
else
{
TREE_INSERT(struct x->rchild, struct z)
}
}
//如果根节点为NULL怎么办
else
{
z->parent = y;
if (y->key == NULL)
{
root = z;
}
else if (z->key < y->key)
{
y->lchild = z;
}
else
{
y->rchild = z;
}
z->lchild = new strcut Tree[LEN];
z->rchild = new strcut Tree[LEN];
z->lchild = new strcut Tree[LEN] = z->lchild = new strcut Tree[LEN] = NULL;
}
}
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/mad.gif)
下面来看一下实现的过程:
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
void TREE_INSERT(struct *x, struct *z)
{
static struct Tree *y = NULL;//一直是指向x的父节点,由于x为根节点,所以根节点
//的父节点为NULL;
static struct Tree *root = x;
//首先考虑根节点
if (x->key != NULL)
{
y = x;
if (z->key < x->key)
{
TREE_INSERT(struct x->lchild, struct z) //传进来的准确来说应该是个地址
}
else
{
TREE_INSERT(struct x->rchild, struct z)
}
}
//如果根节点为NULL怎么办
else
{
z->parent = y;
if (y->key == NULL)
{
root = z;
}
else if (z->key < y->key)
{
y->lchild = z;
}
else
{
y->rchild = z;
}
z->lchild = new strcut Tree[LEN];
z->rchild = new strcut Tree[LEN];
z->lchild = new strcut Tree[LEN] = z->lchild = new strcut Tree[LEN] = NULL;
}
}
相关文章推荐
- C# Winfrom 写的一个Tree的递归以及调用
- 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)
- C++ primer 这本书上有这么两句话“派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。”
- hdu5044 Tree 树链拆分,点细分,刚,非递归版本
- 练习 4-13 编写一个递归版本的 reverse(s)函数,以将字符串 s 倒置
- 使用mysql存储过程递归tree(如一个上级下面的所有下级的所有下级。。。。)
- 练习 4-12 运用 printd 函数的设计思想编写一个递归版本的 itoa 函数,即通过递归 调用把整数转换为字符串
- go语言练习 : 编写一个非递归版本的comma函数,使用bytes.Buffer代替字符串链接操作。
- 【算法题】写一个递归版本的链表转置程序
- 用shell脚本语言实现一个斐波那契数列的递归和非递归版本
- 和同事写了一个下午的递归读取数据库的javabean
- 一个适应多个Windows版本的RAS检测类
- 递归删除一个非空目录及其下所有文件和目录
- Nhibernate的一个例子的修正版本
- Series60的2.1版本的模拟器编码转换的一个小bug
- 基本的一个binarytree的遍历程序
- 写了一个ASP.NET + C# + xmlhttp做的无刷新Tree(类似CSDN)
- 一个关于C++简单递归的奇怪输出结果的不解??
- DOTNETARX(一个用于.net开发AutoCAD程序的类库)实例教学(2.1版本)
- 一个简单的iTextSharp的ASP.NET的例子(根据iText的jsp版本转换而来)