设为首页 加入收藏

TOP

二叉树代码(较全) (一)
2014-11-23 21:42:24 来源: 作者: 【 】 浏览:14
Tags:代码 较全

#include
#include
#include
using namespace std;

// 节点结构体
typedef struct node
{
int data;
node* leftChild;
node* rightChild;
bool leftVisited;
bool rightVisited;

node()
{
int data = -1;
leftChild = NULL;
rightChild = NULL;
leftVisited = false;
rightVisited = false;
}

}Node, *pNode;

//******************************************************************************
// Name: CreateChild
// Desc: 创建子树
//******************************************************************************
void CreateChild(Node* &root, vector::iterator &beginIter,
vector::iterator &endIter)
{
if(beginIter != endIter)
{
int tempData = *beginIter++;
if(tempData != -1)
{
root = new Node;
root->data = tempData;
CreateChild(root->leftChild, beginIter, endIter); // 创建左子树
CreateChild(root->rightChild, beginIter, endIter); // 创建右子树
}
else
{
root = NULL;
}
}
else
{
root = NULL;
}
}

//******************************************************************************
// Name: CreateTree
// Desc: 先序扩展序列创建一棵树(先序遍历,空节点用-1标识)
//******************************************************************************
Node* CreateTree(Node* root, vector &dataVec)
{
if(dataVec.size() < 1) return NULL;

vector::iterator beginIter = dataVec.begin();
vector::iterator endIter = dataVec.end();

root = NULL;
CreateChild(root, beginIter, endIter);

return root;
}

//******************************************************************************
// Name: DisplayTree
// Desc: 二叉显示
//******************************************************************************
void DisplayTree(Node* root)
{
if(root != NULL)
{
cout<<"node:"<data<<" ";
if(root->leftChild != NULL)
{
cout<<"leftChild:"<leftChild->data<<" ";
}
if(root->rightChild != NULL)
{
cout<<"rightChild:"<rightChild->data<<" ";
}
cout<

DisplayTree(root->leftChild);
DisplayTree(root->rightChild);
}
}

//******************************************************************************
// Name: FirstVisite
// Desc: 先根遍历(递归)
//******************************************************************************
void FirstVisite(Node* root)
{
if(root != NULL)
{
cout<data<<" ";
FirstVisite(root->leftChild);
FirstVisite(root->rightChild);
}
}

//******************************************************************************
// Name: CenterVisite
// Desc: 中根遍历(递归)
//******************************************************************************
void CenterVisite(Node* root)
{
if(root != NULL)
{
CenterVisite(root->leftChild);
cout<data<<" ";
CenterVisite(root->rightChild);
}
}

//******************************************************************************
// Name: AfterVisite
// Desc: 后根遍历(递归)
//******************************************************************************
void AfterVisite(Node* root)
{
if(root != NULL)
{
AfterVisite(root->leftChild);
AfterVisite(root->rightChild);
cout<data<<" ";
}
}

//******************************************************************************
// Name: ResetTree
// Desc: 重置二叉树,方便一次遍历
//******************************************************************************
void ResetTree(Node* root)
{
if(root != NULL)
{
root->leftVisited = false;
root->rightVisited = false;
ResetTree(root->leftChild);
ResetTree(root->rightChild);
}
}

//*******************

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++一些注意点之操作符重载 下一篇poj2354

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)