데이터 구조 - 트 리 의 노드 개수

[제목 은 회색 대학원 입 니 다.]
(2018 북리 813, 2018 화 과 887)
이 진 트 리 의 결점 개 수 를 구하 고 뿌리 노드 가 비어 있 으 면 0 으로 돌아 갑 니 다. 
typedef struct Bintreenode{ 
int data; 
struct Bintreenode *right;
struct Bintreenode *left; 
} *Bintreenode
 
#include
#include
#include
using namespace std;

int count = 0;

typedef struct TNode{
	char data;
	struct TNode *rChild;
	struct TNode *lChild;
}TNode;

void CreateTree(TNode *&bt)
{
	//124##57###38#9###
	/*
		        
	*/
	char data;
	cin>>data;
	bt = (TNode *)malloc(sizeof(TNode));
	if(data == '#')
		bt = NULL;
	else
	{
		bt->data = data;
		CreateTree(bt->lChild);
		CreateTree(bt->rChild);
	}
}

TNode *CreateTree1()
{
	/*
		              
	*/
	//124##57###38#9###
	TNode *root;
	char data;
	cin>>data;
	if(data == '#')
		return NULL;
	else
	{
		root = (TNode *)malloc(sizeof(TNode));
		root->data = data;
		root->lChild = CreateTree1();
		root->rChild = CreateTree1();
	 } 

	return root;
}

void GetNodeNumber(TNode *root)
{
	/*
		               
	*/ 
	if(!root)
		return;
	if(root != NULL)
	{
		count++;
		GetNodeNumber(root->lChild);
		GetNodeNumber(root->rChild);
	}
}

void preOrderRecursionVisit(TNode *bt)
{
	/*
		        
	*/ 
	if(bt == NULL)
		return;
	else
	{
		cout<data<lChild);
		preOrderRecursionVisit(bt->rChild);
	}
}

int main()
{
	TNode *root;
	CreateTree(root); 
	//root = CreateTree1();
	preOrderRecursionVisit(root);
	cout<

확장 문제 1: (2017 화 과 887) 
이 진 트 리 는 두 자녀 를 가 진 결점 개 수 를 구하 고 뿌리 노드 가 비어 있 으 면 0 으로 돌아 갑 니 다. 
이 진 트 리 노드 구 조 는 다음 과 같이 정의 합 니 다.
typedef struct Bintreenode{ 
int data; 
struct Bintreenode *right; 
struct Bintreenode *left;
 } *Bintreenode; 
 
같은 순환 사상 은 계산 전략 을 수정 하기 만 하면 된다.
void NodesNumHasTwoChildren(TNode *bt)
{
	/*
		        ,           
	*/ 
	if(bt == NULL)
		return;
	else
	{
		if(bt->lChild && bt->rChild)
			count1++;
		NodesNumHasTwoChildren(bt->lChild);
		NodesNumHasTwoChildren(bt->rChild);
	}
}

작업: (개구리 문제 정선) 
이 진 트 리 의 모든 키 가 작은 여자 의 결점 개 수 를 구하 고 뿌리 노드 가 비어 있 으 면 0 으로 돌아 갑 니 다. 
이 진 트 리 노드 구 조 는 다음 과 같이 정의 합 니 다.
typedef struct Bintreenode{ 
int data; 
struct Bintreenode *right; 
struct Bintreenode *left;
 } *Bintreenode; 
 
void NodesNumHasOneChildren(TNode *bt)
{
	/*
		        ,           
	*/ 
	if(bt == NULL)
		return;
	else
	{
		if((bt->lChild && !bt->rChild) || (!bt->lChild && bt->rChild))
			count2++;
		NodesNumHasOneChildren(bt->lChild);
		NodesNumHasOneChildren(bt->rChild);
	}
}

좋은 웹페이지 즐겨찾기