blueconviction
凝视远空,在海与天的尽头,于心与心的距离。
博客园
首页
社区
新随笔
联系
订阅
管理
随笔-1 评论-0 文章-3 trackbacks-0
老弟的数据结构
/*
----------------------
*/
/**/
/*
-- 二叉排序树 --
*/
/**/
/*
----------------------
*/
#include
<
iostream.h
>
struct
bTree
{
int
data;
bTree
*
left;
bTree
*
right;
}
;
int
sum
=
0
;
void
insert(bTree
*&
bt,
int
x)
{
bTree
*
p;
if
(bt
!=
NULL)
{
if
(x
>=
bt
->
data)
insert(bt
->
right,x);
else
insert(bt
->
left,x);
}
else
{
p
=
new
bTree;
p
->
data
=
x;
p
->
left
=
NULL;
p
->
right
=
NULL;
bt
=
p;
return
;
}
}
bTree
*
create()
{
cout
<<
"
即将建立二叉排序树\nx==0结束!
"
<<
endl;
bTree
*
p
=
NULL;
int
x;
cout
<<
"
请输入二叉树数据:
"
<<
endl;
cin
>>
x;
while
(x
!=
0
)
{
insert(p,x);
cin
>>
x;
}
return
p;
}
int
leaf(bTree
*
bt)
{
if
(bt
==
NULL)
return
0
;
else
if
(bt
->
left
==
NULL
&&
bt
->
right
==
NULL)
return
1
;
else
return
leaf(bt
->
left)
+
leaf(bt
->
right);
}
void
sumNode(bTree
*
bt)
{
if
(bt)
{
sum
++
;
sumNode(bt
->
left);
sumNode(bt
->
right);
}
}
int
treeHight(bTree
*
bt)
{
int
h,lh,rh;
if
(bt
==
NULL)
h
=
0
;
else
{
lh
=
treeHight(bt
->
left);
rh
=
treeHight(bt
->
right);
h
=
((lh
>
rh
?
lh:rh)
+
1
);
}
return
h;
}
bTree
*
search(bTree
*
bt,
int
x)
{
if
(bt)
{
if
(bt
->
data
==
x)
return
bt;
else
if
(x
>=
bt
->
data)
search(bt
->
right,x);
else
search(bt
->
left,x);
}
else
return
NULL;
}
void
show(bTree
*
bt)
{
if
(bt)
{
show(bt
->
left);
cout
<<
bt
->
data
<<
'
'
;
show(bt
->
right);
}
}
int
Delete(bTree
*
bt,
int
x)
//
算法思考ing
.
{
return
0
;
}
void
clear(bTree
*
bt)
{
if
(bt)
{
clear(bt
->
left);
clear(bt
->
right);
delete bt;
}
}
void
main()
{
char
s;
int
x;
bTree
*
root
=
create();
sumNode(root);
cout
<<
"
树总节点数:
"
<<
sum
<<
endl;
cout
<<
"
树深数:
"
<<
treeHight(root)
<<
endl;;
cout
<<
"
树叶子数:
"
<<
leaf(root)
<<
endl;
cout
<<
"
中序遍历:
"
<<
endl;
show(root);
cout
<<
endl;
while
(
1
)
{
cout
<<
"
输入'i'插入:
"
<<
endl;
cout
<<
"
输入's'查找:
"
<<
endl;
//
cout<<"输入'd'删除:"<<endl;
cout
<<
"
输入'e'结束:
"
<<
endl;
cin
>>
s;
switch
(s)
{
case
'
i
'
:
cout
<<
"
请输入要插入的数:
"
<<
endl;
cin
>>
x;
insert(root,x);
sum
=
0
;
sumNode(root);
cout
<<
"
树总节点数:
"
<<
sum
<<
endl;
cout
<<
"
树深数:
"
<<
treeHight(root)
<<
endl;
cout
<<
"
树叶子数:
"
<<
leaf(root)
<<
endl;
cout
<<
"
中序遍历:
"
<<
endl;
show(root);
cout
<<
endl;
break
;
case
'
s
'
:
cout
<<
"
请输入要查找的数:
"
<<
endl;
cin
>>
x;
if
(search(root,x)
==
NULL)
cout
<<
"
查找失败!
"
<<
endl;
else
{
cout
<<
"
查找成功!\n查找的值为:
"
<<
search(root,x)
->
data
<<
endl;
}
break
;
case
'
d
'
:
cout
<<
"
请输入要删除的数:
"
<<
endl;
cin
>>
x;
if
(Delete(root,x)
==
0
)
cout
<<
"
删除失败!
"
<<
endl;
sum
=
0
;
sumNode(root);
cout
<<
"
树总节点数:
"
<<
sum
<<
endl;
cout
<<
"
树深数:
"
<<
treeHight(root)
<<
endl;
cout
<<
"
树叶子数:
"
<<
leaf(root)
<<
endl;
cout
<<
"
中序遍历:
"
<<
endl;
show(root);
cout
<<
endl;
break
;
case
'
e
'
:
clear(root);
cout
<<
"
树已清除
"
<<
endl;
cout
<<
endl;
return
;
}
}
}
/**/
/*
----------------------
*/
/**/
/*
-- 二叉排序树 --
*/
/**/
/*
----------------------
*/
#include
<
iostream.h
>
struct
bTree
{
int
data;
bTree
*
left;
bTree
*
right;
}
;
int
sum
=
0
;
void
insert(bTree
*&
bt,
int
x)
{
bTree
*
p;
if
(bt
!=
NULL)
{
if
(x
>=
bt
->
data)
insert(bt
->
right,x);
else
insert(bt
->
left,x);
}
else
{
p
=
new
bTree;
p
->
data
=
x;
p
->
left
=
NULL;
p
->
right
=
NULL;
bt
=
p;
return
;
}
}
bTree
*
create()
{
cout
<<
"
即将建立二叉排序树\nx==0结束!
"
<<
endl;
bTree
*
p
=
NULL;
int
x;
cout
<<
"
请输入二叉树数据:
"
<<
endl;
cin
>>
x;
while
(x
!=
0
)
{
insert(p,x);
cin
>>
x;
}
return
p;
}
int
leaf(bTree
*
bt)
{
if
(bt
==
NULL)
return
0
;
else
if
(bt
->
left
==
NULL
&&
bt
->
right
==
NULL)
return
1
;
else
return
leaf(bt
->
left)
+
leaf(bt
->
right);
}
void
sumNode(bTree
*
bt)
{
if
(bt)
{
sum
++
;
sumNode(bt
->
left);
sumNode(bt
->
right);
}
}
int
treeHight(bTree
*
bt)
{
int
h,lh,rh;
if
(bt
==
NULL)
h
=
0
;
else
{
lh
=
treeHight(bt
->
left);
rh
=
treeHight(bt
->
right);
h
=
((lh
>
rh
?
lh:rh)
+
1
);
}
return
h;
}
bTree
*
search(bTree
*
bt,
int
x)
{
if
(bt)
{
if
(bt
->
data
==
x)
return
bt;
else
if
(x
>=
bt
->
data)
search(bt
->
right,x);
else
search(bt
->
left,x);
}
else
return
NULL;
}
void
show(bTree
*
bt)
{
if
(bt)
{
show(bt
->
left);
cout
<<
bt
->
data
<<
'
'
;
show(bt
->
right);
}
}
int
Delete(bTree
*
bt,
int
x)
//
算法思考ing
.
{
return
0
;
}
void
clear(bTree
*
bt)
{