C++ 二叉树的建立与遍历

重温了一下二叉树这个结构,以前上课的时候都是感觉懂了,具体实现还没有动手写过。主要写了二叉树的建立,递归遍历以及深度,根节点等方法。

//树节点的头文件

#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 * &currentNode)
{
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 * &currentNode)
{

if(currentNode!=NULL)
{
inorderTraversal(currentNode->leftChild);
cout<< currentNode->data<<" ";
inorderTraversal(currentNode->rightChild);
}
}
void BinTree::postorderTraversal(BinTreeNode* &currentNode)
{
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;
}

转载于:https://www.cnblogs.com/gardener/p/5973431.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值