标签:
重温了一下二叉树这个结构,以前上课的时候都是感觉懂了,具体实现还没有动手写过。主要写了二叉树的建立,递归遍历以及深度,根节点等方法。
//树节点的头文件
#ifndef BinTreeNode_H_
#define BinTreeNode_H_
#define  NULL 0
class BinTreeNode
{
public:
	char data;
	BinTreeNode* leftChild; //左子树
	BinTreeNode* rightChild;//右子树
public:
	BinTreeNode();
	BinTreeNode(char item);//带参构造函数
	
};
#endif
#include "BinTreeNode.h"
BinTreeNode::BinTreeNode()
{
}
BinTreeNode::BinTreeNode(char item)
{
	data=item;
	leftChild=NULL;
	rightChild=NULL;
}
#ifndef BinTree_H_
#define BinTree_H_
#include "BinTreeNode.h"
class BinTree
{
public:
	BinTree();
	BinTreeNode *getRoot();
	int getdepth(BinTreeNode* );
	void createTree(BinTreeNode* &);//构造二叉树,传递的是指针的引用
	void preorderTraversal(BinTreeNode* &);//先序递归遍历
	void inorderTraversal(BinTreeNode* &);//中序递归遍历
	void postorderTraversal(BinTreeNode* &);//后续递归遍历	
private:
	BinTreeNode *root;
	int depth;
};
#endif
#include "BinTree.h"
#include <iostream>
using namespace std;
BinTree::BinTree()
{
	root =NULL;
}
BinTreeNode*  BinTree::getRoot()
{
	return root;
}
void BinTree::createTree(BinTreeNode* &treeNode)
{
	
	char item;
	cin>>item;
    if(item==‘0‘)
	{
		treeNode=NULL;
	}
	else
	{
		treeNode=new BinTreeNode(item);
		if(root==NULL)
		{
			root=treeNode;
		}
		createTree(treeNode->leftChild);
		createTree(treeNode->rightChild);
	}
}
void BinTree::preorderTraversal(BinTreeNode * ¤tNode)
{
	cout<<currentNode->data<<" ";
	if(currentNode->leftChild!=NULL)
		preorderTraversal(currentNode->leftChild);
	if(currentNode->rightChild!=NULL)
		preorderTraversal(currentNode->rightChild);
	
// 	if(currentNode)
// 	{
// 		cout<<currentNode->data<<" ";
// 		preorderTraversal(currentNode->leftChild);
// 		preorderTraversal(currentNode->rightChild);
// 	}
}
void BinTree::inorderTraversal(BinTreeNode * ¤tNode)
{
	if(currentNode!=NULL)
	{
		inorderTraversal(currentNode->leftChild);
		cout<< currentNode->data<<" ";
		inorderTraversal(currentNode->rightChild);
	}
}
void BinTree::postorderTraversal(BinTreeNode* ¤tNode)
{
	if(currentNode!=NULL)
	{
		postorderTraversal(currentNode->leftChild);
		postorderTraversal(currentNode->rightChild);
		cout<<currentNode->data<<" ";
	}
}
int BinTree::getdepth(BinTreeNode* parentNode)//获取二叉树的深度
{
	if(parentNode==NULL)
		return 0;
	int ldepth=getdepth(parentNode->leftChild);
	int rdepth=getdepth(parentNode->rightChild);
	if(ldepth>=rdepth) return (ldepth+1);
	return (rdepth+1);
}
#include "BinTree.h"
#include <iostream>
using namespace std;
 int main()
 {
	 BinTree binTree;
	 BinTreeNode * node=new BinTreeNode;
	 cout<<"请输入二叉树节点(例如:ab00c00)";
	 binTree.createTree(node);
	  binTree.preorderTraversal(node);
	  cout<<endl;
	  binTree.inorderTraversal(node);
	  cout<<endl;
	  binTree.postorderTraversal(node);
	  cout<<endl;
	  BinTreeNode *root=binTree.getRoot();
	 cout<<root->data;
	 cout<<binTree.getdepth(node);
	
	 return 0;
 }
标签:
原文地址:http://www.cnblogs.com/gardener/p/5973431.html