//树的建立
node* buildtree()
{
node* root;
if (s[tot] == ',')
{
root = NULL;
tot++;
}
else
{
root = new node;
root->data = s[tot++];
root->l = buildtree();
root->r = buildtree();
}
return root;
}
//根据前序和中序遍历结果建树
node* buildtree(int len,char *pre,char *mid)
{
node* p;
if (!len)
return NULL;
p = new node;
p->data = pre[0];
int i;
for (i = 0; i < len; i++)
{
if (mid[i] == pre[0])break;
}
p->l = buildtree(i, pre + 1, mid);
p->r = buildtree(len - i - 1, pre + i + 1, mid + i + 1);
return p;
}
//根据后序和中序遍历结果建树
node* buildtree(int len,char *pos,char *mid)
{
node *p = new node;
if (!len)
return NULL;
p->data = pos[len - 1];
int i;
for (i = 0; i < len; i++)
{
if (pos[len - 1] == mid[i])break;
}
p->l = buildtree(i, pos, mid);
p->r = buildtree(len - i - 1, pos + i, mid + i + 1);
return p;
}
//前中后三种遍历方式都是DFS(深度优先搜索)
//前序遍历
void preorder(node* root)
{
if (root)
{
cout << root->data;
preorder(root->l);
preorder(root->r);
}
}
//中序遍历
void midorder(node* root)
{
if (root)
{
midorder(root->l);
cout << root->data;
midorder(root->r);
}
}
//后序遍历
void postorder(node* root)
{
if (root)
{
postorder(root->l);
postorder(root->r);
cout << root->data;
}
}
//DFS(广度优先遍历)层次遍历
void Floororder(node* root)
{
queue<node*>que;
if (root)
{
que.push(root);
}
while (!que.empty())
{
node* root = que.front();
if (root->l)
{
que.push(root->l);
}
if (root->r)
{
que.push(root->r);
}
cout << root->data;
que.pop();
}
}
//统计叶节点
void Get_leaf(node* root)
{
if (root)
{
if (!root->l && !root->r)
{
cnt++;//cout<<root->data;(输出叶节点)
}
Get_leaf(root->l);
Get_leaf(root->r);
}
}
//计算二叉树深度
int Get_depth(node* root)
{
if (!root)return 0;
else
{
int lheight = Get_depth(root->l) + 1;
int rheight = Get_depth(root->r) + 1;
return max(lheight, rheight);
}
}
保存一下防止丢失