读书人

关于二叉树的有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

关于二叉树的问题
谁能给我描述一下生成一个二叉树的算法,

比如有100个整数,如果要生成一个二叉树是不是先创造一个array然后按顺序第一个是根,第二个保存在array[2i],第三个在array[2i+1]。但这样和按顺序给数组赋值有什莫不一样?

还有两个二叉树如何在根节点合并?

[解决办法]
关注一下

[解决办法]
你这个是用静态数组来模拟二叉树,只是一种情况,二叉树的形式多样,内容丰富的很啊!
至于合并,就先找到两棵树的根,然后让一颗成为另一颗的子树即可了啊
[解决办法]
用递归阿函数

[解决办法]
#include <iostream>
using namespace std;
#define MaxSize 100
typedef struct bnode
{
char data;
bnode *lchild, *rchild;
}BTNode;
int
main(void)
{
void CreateBTNode(BTNode *&root, const char *str);
void DispBTNode(BTNode *&root);

BTNode *root;
const char *str = "1(2, 3(4, 5)) ";
CreateBTNode(root, str);
cout < <endl;
cout < < "after CreateBTNode(root), root is : " < <endl;
DispBTNode(root);
cout < <endl;
return 0;
}
void DispBTNode(BTNode *&root)
{
if (root != NULL)
{
cout < <root-> data;
if (root-> lchild != NULL && root-> rchild != NULL)
{
cout < < "( ";
DispBTNode(root-> lchild);
if (root-> rchild != NULL)
cout < < ", ";
DispBTNode(root-> rchild);
cout < < ") ";
}
}
}
void CreateBTNode(BTNode *&root, const char *str)
{
int i = 0, top = -1, k;
char ch;
BTNode *st[MaxSize], *node = NULL;
root = NULL;
ch = str[i];
while (ch != '\0 ')
{
switch (ch)
{
case '( ' : top++; st[top] = node; k = 1; break;
case ', ' : k =2; break;
case ' ' : break;
case ') ' : top--; break;
default : node = new BTNode;
node-> data = ch;
node-> lchild = node-> rchild = NULL;
if (root == NULL)
root = node;
else
switch (k)
{
case 1 : st[top]-> lchild = node; break;
case 2 : st[top]-> rchild = node; break;
}
}
i++;
ch = str[i];
}
}

读书人网 >软件架构设计

热点推荐