#include<iostream>
using namespace std;
typedef struct BiTNode {
int data; //数据域
struct BiTNode* lchild, * rchild; //左右孩子指针
}BiTNode,*BiTree;
BiTree Create() {
BiTNode* root = (BiTNode*)malloc(sizeof(BiTNode));
return root;
}
//bool LeftInsert(BiTree root,int x) {
BiTNode* LeftInsert(BiTree root,int x) {
//插入新结点
BiTNode* p = (BiTNode*)malloc(sizeof(BiTNode));
p->data = x;
p->lchild = NULL;
p->rchild = NULL;
root->lchild = p;//作为根节点的左孩子
return p;
}
//bool RightInsert(BiTree root,int x) {
BiTNode* RightInsert(BiTree root, int x) {
//插入新结点
BiTNode* p = (BiTNode*)malloc(sizeof(BiTNode));
p->data = x;
p->lchild = NULL;
p->rchild = NULL;
root->rchild = p;//作为根节点的右孩子
return p;
}
void visit(BiTree T) {
cout << T->data;
}
//先序遍历
void PreOrder(BiTree T) {
if (T != NULL) {
visit(T); //访问根节点 根
PreOrder(T->lchild);//递归遍历左子树 左
PreOrder(T->rchild);//递归遍历右子树 右
}
}
//中序遍历
void InOrder(BiTree T) {
if (T != NULL) {
PreOrder(T->lchild);//递归遍历左子树 左
visit(T); //访问根节点 根
PreOrder(T->rchild);//递归遍历右子树 右
}
}
//后序遍历
void PostOrder(BiTree T) {
if (T != NULL) {
PreOrder(T->lchild);//递归遍历左子树 左
PreOrder(T->rchild);//递归遍历右子树 右
visit(T); //访问根节点 根
}
}
int treeDepth(BiTree T) {
if (T == NULL) {
return 0;
}
else {
int l = treeDepth(T->lchild);
int r = treeDepth(T->rchild);
return l > r ? l + 1 : r + 1;
}
}
int main() {
//定义一颗空树
BiTree root = Create();
root->data = 1;
root->lchild = NULL;
root->rchild = NULL;
BiTNode* B = LeftInsert(root, 2);
BiTNode* C = RightInsert(root, 3);
BiTNode* D = LeftInsert(B, 4);
BiTNode* E = RightInsert(B, 5);
BiTNode* G = RightInsert(D, 7);
BiTNode* F = LeftInsert(C, 6);
cout << "先序遍历:" << endl;
PreOrder(root);
cout << endl << "中序遍历:" << endl;
InOrder(root);
cout << endl << "后序遍历:" << endl;
PostOrder(root);
cout << endl << "树深为:" << treeDepth(root) << endl;
}
二叉树前中后序遍历的C++实现
最新推荐文章于 2024-09-29 23:53:24 发布