//二叉树
class Node
{
public:
char data;
Node *left;
Node *right;
Node():data(' '),left(NULL),right(NULL){}
Node(char ch):data(ch),left(NULL),right(NULL){}
};
//广义表建立二叉树,输入:A(B(D,E(G,)),C(,F))*
void CreateBinTree(Node* & Root,char *str)
{
stack<Node*> s;
Root=NULL;
Node* p=NULL,*t=NULL;
int k,i=0;
while(str[i])
{
switch(str[i])
{
case '(': s.push(p); k=1; break;
case ')': t=s.top(); s.pop(); break;
case ',': k=2; break;
default:
p=new Node(str[i]);
if(Root==NULL) Root=p;
else if(k==1)
{
t=s.top(); t->left=p;
}
else
{
t=s.top(); t->right=p;
}
}
++i;
}
}
//递归先序遍历
void preOrderTraverse(Node *p)
{
if(p != NULL)
{
cout<<p->data;
preOrderTraverse(p->left);
preOrderTraverse(p->right);
}
}
//求节点个数
int Size(Node* root)
{
if(root == NULL) return 0;
return 1 + Size(root->left) + Size(root->right);
}
//求树的高度
int TreeDepth(Node* t)
{
int hl,hr,h;
if(t != NULL)
{
hl = TreeDepth(t->left);
hr = TreeDepth(t->right);
h = hl>hr? hl:hr;
return h+1;
}
return 0;
}
//销毁二叉树
void freeTree(Node*& p)
{
if(p->left != NULL)
freeTree(p->left);
if(p->right != NULL)
freeTree(p->right);
delete(p);
}
class Node
{
public:
char data;
Node *left;
Node *right;
Node():data(' '),left(NULL),right(NULL){}
Node(char ch):data(ch),left(NULL),right(NULL){}
};
//广义表建立二叉树,输入:A(B(D,E(G,)),C(,F))*
void CreateBinTree(Node* & Root,char *str)
{
stack<Node*> s;
Root=NULL;
Node* p=NULL,*t=NULL;
int k,i=0;
while(str[i])
{
switch(str[i])
{
case '(': s.push(p); k=1; break;
case ')': t=s.top(); s.pop(); break;
case ',': k=2; break;
default:
p=new Node(str[i]);
if(Root==NULL) Root=p;
else if(k==1)
{
t=s.top(); t->left=p;
}
else
{
t=s.top(); t->right=p;
}
}
++i;
}
}
//递归先序遍历
void preOrderTraverse(Node *p)
{
if(p != NULL)
{
cout<<p->data;
preOrderTraverse(p->left);
preOrderTraverse(p->right);
}
}
//求节点个数
int Size(Node* root)
{
if(root == NULL) return 0;
return 1 + Size(root->left) + Size(root->right);
}
//求树的高度
int TreeDepth(Node* t)
{
int hl,hr,h;
if(t != NULL)
{
hl = TreeDepth(t->left);
hr = TreeDepth(t->right);
h = hl>hr? hl:hr;
return h+1;
}
return 0;
}
//销毁二叉树
void freeTree(Node*& p)
{
if(p->left != NULL)
freeTree(p->left);
if(p->right != NULL)
freeTree(p->right);
delete(p);
}