건수와 잎 노드의 개수 1398

1379 단어

묘사
두 갈래 나무의 광의표 표시 방법을 제시하려면 두 갈래 체인표의 방식으로 두 갈래 나무를 세워 주십시오.나무의 잎 노드 수를 출력합니다.
빈 나무 상황은 고려하지 않는다!
#include<iostream>
#include<stack>
using namespace std;
#define MAX(a,b) a>b?a:b;
typedef struct Node
{
	char data;
	Node *left;
	Node *right;
}*pBTNode, BTNode;


void CreateBTree(pBTNode &root, char str[])
{
	pBTNode p=NULL, temp=NULL;
	stack<pBTNode> st;
	int i, flag, top=-1;
	for(i=0; str[i]!='\0'; i++)
	{
		switch( str[i] )
		{
			case '(':flag=1;st.push(p);break;// , , ;  
			case ',':flag=2;break;// ,  
			case ')':st.pop();break;// , ,  
			
			default:
                    p=new BTNode;
                    p->data=str[i]; p->left=p->right=NULL;
                    
                    if( root==NULL ) root=p;
					else
					{
						temp=st.top();
					    switch(flag)
						{
							case 1:temp->left=p;break;
							case 2:temp->right=p; break;
						} 
					}
		}
	}
}

int Num(pBTNode p)
{
	if( p==NULL ) return 0;
	if( p->left==NULL && p->right==NULL )
	    return 1;
    
    return Num(p->left)+Num(p->right);   
}

int main()
{
	char str[1000];
	BTNode *root=NULL;
	int t;
	cin>>t;
	while( t-- )
	{
	    cin>>str;
	    root=NULL;
    	CreateBTree(root, str);
	    cout<<Num(root)<<endl;
	}
}

좋은 웹페이지 즐겨찾기