c++二叉树

// BinTree.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>

//the struct of the Node
struct binNode{
	int data;
	binNode *leftNode;
	binNode *rightNode;
};

class binaryTree
{
public:
	unsigned int nodeNum;
	unsigned int treeDepth;
	unsigned int leafNum;

	binNode *root;
	binaryTree(){
		root = NULL;
	}

	void createBinaryTree(int data);

	void preOrder(binNode *curNod);                  //root-left-right
	void inOrder(binNode *curNod);                   //left-root-right
	void postOrder(binNode *curNod);                 //left-right-root
 
	int count(binNode *curNod);                      
	int count();

	int findLeaf(binNode *curNod);                   //get the number of leaves
	int findNode(binNode *curNod);                   //
protected:
private:
};

void binaryTree::createBinaryTree(int dataNew)
{
	binNode *newNode = new binNode;
	newNode->data = dataNew;
	newNode->rightNode = newNode->leftNode = NULL;

	if(root == NULL)
		root = newNode;
	else
	{
		binNode *curNode = root;
		binNode *preNode = NULL;

		while ( NULL != curNode )
		{ 
			preNode = curNode;
			if (dataNew < curNode->data)
				curNode = curNode->leftNode;			

			else
				curNode = curNode->rightNode;
		}
		if (dataNew < preNode->data)
			preNode->leftNode = newNode;			

		else
			preNode->rightNode = newNode;
	}
}

int binaryTree::count()
{
	return binaryTree::count(root);   
}

int binaryTree::count(binNode *p)
{
	if(p == NULL)
		return 0;
	else
		return count(p->leftNode) + count(p->rightNode) + 1;      
}

void binaryTree::preOrder(binNode *curNode)
{
	if(curNode != NULL)
	{
		std::cout<<curNode->data<<" ";
		preOrder(curNode->leftNode);
		preOrder(curNode->rightNode);
	}
}

void binaryTree::postOrder(binNode *curNode)
{
	if(curNode != NULL)
	{
		postOrder(curNode->leftNode);
		postOrder(curNode->rightNode);
		std::cout<<curNode->data<<" ";
	}
}

void binaryTree::inOrder(binNode *curNode)
{
	if(curNode != NULL)
	{		
		inOrder(curNode->leftNode);
		std::cout<<curNode->data<<" ";
		inOrder(curNode->rightNode);
	}
}

int binaryTree::findLeaf(binNode *curNode)
{
	if ( curNode == NULL)
		return 0;
	else
	{
		if ( (curNode->leftNode != NULL) || (curNode->rightNode != NULL ) )
		{
			findLeaf(curNode->leftNode);
			findLeaf(curNode->rightNode);
		}
		else
		{
			binaryTree::leafNum ++;
			std::cout<<curNode->data<<" ";
		}
			
		return binaryTree::leafNum;
	}

}

void main()
{
	binaryTree myBinaryTree;
	int array[]={7,4,2,3,15,35,6,45,55,20,1,14,56,57,58};
	unsigned int nodeNum = sizeof(array)/sizeof(array[0]); 
	myBinaryTree.nodeNum = nodeNum;

	std::cout<<"create a binary tree by order: "<<std::endl;
	for(int i = 0; i < nodeNum; i++){
		std::cout<<array[i]<<" ";
		myBinaryTree.createBinaryTree(array[i]);
	}
	std::cout<<std::endl;
	std::cout<<myBinaryTree.count(myBinaryTree.root)<<std::endl;
	std::cout<<myBinaryTree.count()<<std::endl;

	myBinaryTree.postOrder(myBinaryTree.root);
	std::cout<<std::endl;
	myBinaryTree.inOrder(myBinaryTree.root);
	std::cout<<std::endl;
	unsigned int leafNum = myBinaryTree.findLeaf(myBinaryTree.root);
	std::cout<<"leaf number:"<<leafNum<<std::endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值