#include
<
iostream
>
#include
<
vector
>
using
namespace
std;
struct
BtreeNode
{
int data
;
BtreeNode
*lchild
;
BtreeNode
*rchild
;
};
//
创建完全二叉树
//
先创建各个节点,然后将节点连接起来
BtreeNode
*
createBtree
(
const
vector
<
int
>
&
vec
)
{
if
(vec.
empty()
)
return
nullptr
;
const
int N
= vec.
size()
;
BtreeNode
*p
=
nullptr
;
BtreeNode
*bQueue[N]
;
//
创建节点
for
(
int i
=
0
; i
< vec.
size()
;
++i
)
{
p
=
new
BtreeNode()
;
p->
data
= vec[i]
;
bQueue[i]
= p
;
}
//
将节点连接起来
int index
=
1
;
//
下一个将要连接的节点位置
int i
=
0
;
//
正在连接中的节点位置
while
(index
< N
)
{
if
(bQueue[i]
!=
nullptr
)
{
bQueue[i]->
lchild
= bQueue[index
++]
;
bQueue[i]->
rchild
= bQueue[index
++]
;
++i
;
}
}
return bQueue[
0]
;
}
//
前序遍历
void
PreOrderTraverse
(
BtreeNode
*
root
)
{
if
(root
)
{
printf
(
"
%d
,
", root->
data
);
PreOrderTraverse(root->
lchild)
;
PreOrderTraverse(root->
rchild)
;
}
}
int
main
()
{
vector
<
int
> a
=
{
1,
4,
6,
7,
2,
5,
3,
9,
8
};
BtreeNode
*root
=
createBtree(a)
;
PreOrderTraverse(root)
;
return
0
;
}