创建
typedef struct node
{
char val;
struct node *lc, *rc;
}BiNode,*BiTree;
char a[1024]; int i = 1;
void Creat(BiTree &T)
{
char n;
cin >> n;
if (n == '#')
T = NULL;
else {
T = new BiNode;
T->val = n;
Creat(T->lc);
Creat(T->rc);
}
先序访问结点 并存储到数组中
void Preorder(BiTree &T)
{
if (T)
{
a[i] = T->val;
i++;
Preorder(T->lc);
Preorder(T->rc);
}
}
计算二叉树的深度
int Depth(BiTree T) //计算二叉树的深度
{
if (T == NULL)
return 0; //此处为计数需要return 0来计算
else {
int m = Depth(T->lc);
int n = Depth(T->rc);
if (m > n)
return ( m + 1);
else
return ( n + 1);
}
}
计算二叉树结点个数
int NodeCount(BiTree T) //计算二叉树结点个数
{
if (T == NULL)
return 0;
else
{
return (NodeCount(T->lc) + NodeCount(T->rc) + 1);
}
}
//计算二叉树叶子结点个数
int LeftCount(BiTree T) //计算二叉树叶子结点个数
{
if (T == NULL)
return 0;
if (T->lc == NULL && T->rc == NULL)
return 1;
else
return (LeftCount(T->lc) + LeftCount(T->rc)); //继续寻找
}
//计算度数为1的结点个数
int Node1Count(BiTree T) //计算度数为1的结点个数
{
if (T == NULL)
return 0;
if ((T->lc == NULL && T->rc != NULL) || (T->lc != NULL && T->rc == NULL))
return (Node1Count(T->lc) + Node1Count(T->rc) + 1);
else
return Node1Count(T->lc) + Node1Count(T->rc); //继续寻找都左右孩子都不空的结点
}
二叉树的复制
void Copy(BiTree T, BiTree &NewT) //二叉树的复制
{
if (T == NULL) {
NewT = NULL;
return;
}
else
{
NewT = new BiNode;
NewT->val = T->val;
Copy(T->lc, NewT->lc);
Copy(T->rc, NewT->rc);
}
}
主函数
int main()
{
BiTree T;
Creat(T);
int f;
cin >> f;
Preorder(T);
cout << a[f];
return 0;
}