赞
踩
2020年8月14日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
用C++实现了简单的二叉树类,成员函数实现了二叉树的创建,遍历,求高度,求结点层次,求结点的父结点、兄弟结点和子结点等功能,主函数中有所有成员函数的测试案例。代码是用VS2019实现的,每个函数的功能都添加了一定注释,由于用了模板,函数的声明和定义都放在了.h文件中,完整工程放在了我的github上,有需要的也可以自取。
github地址:https://github.com/March225/Data-structure-implemented-by-Cpp
/** * @Copyright (C) 2020 March. All rights reserved. * @license GNU General Public License (GPL) * @author March * @email 345916208@qq.com * @file main.cpp * @brief 二叉树的C++实现主文件 * @version 1.0 * @date 2020-08-14 */ #include "stdafx.h" #include "binarytree.h" int main() { FILE* stream1; ios::sync_with_stdio(false); // 让c风格的输入输出流和c++的输入输出流分开,使cin读入的更快 freopen_s(&stream1, "1.in", "r", stdin); // 直接从文档中读取待输入的数据 BinaryTree<char>* BiT1 = new BinaryTree<char>; BiT1->CreatByPreOrderOfExtBiT(); // 通过扩展二叉树的前序遍历创建二叉树 // 递归遍历 cout << "前序遍历(递归):"; BiT1->PreOrderTraverse(0); cout << "中序遍历(递归):"; BiT1->InOrderTraverse(0); cout << "后序遍历(递归):"; BiT1->PostOrderTraverse(0); cout << "层次遍历(递归):"; BiT1->LevelOrderTraverse(0); // 非递归遍历 cout << endl << "前序遍历(非递):"; BiT1->PreOrderTraverse(1); cout << "中序遍历(非递):"; BiT1->InOrderTraverse(1); cout << "后序遍历(非递):"; BiT1->PostOrderTraverse(1); cout << "层次遍历(非递):"; BiT1->LevelOrderTraverse(1); // 中序遍历输出各结点的值及对应层次 cout << endl << "中序输出各结点的值及对应层次:" << endl; BiT1->PrintLeveInOrderTra(); // 交换每个结点的左右子结点 cout << "交换每个结点的左右子结点后:" << endl; BiT1->ExchangeValOfLAndRChild(); cout << "层次遍历(递归):"; BiT1->LevelOrderTraverse(0); // 打印二叉树中值为val的结点的层次 char val1 = 'C'; cout << endl << "二叉树中结点 " << val1 << " 的层次:" << BiT1->GetLevelByVal(val1) << endl; // 打印二叉树结点总数 cout << endl << "二叉树结点总数:" << BiT1->NumberOfBiTNode() << endl; // 打印二叉树叶子结点数 cout << endl << "二叉树叶子结点数:" << BiT1->NumberOfBiTLeafNode() << endl; // 打印二叉树中度为2的结点数 cout << endl << "二叉树中度为2的结点数:" << BiT1->NumberOfNodeWithTwoDeg() << endl; // 返回值为val的结点的父结点 char val2 = 'C'; BiTNode<char>* parent = BiT1->GetParent(val2); if(parent) cout << endl << "二叉树中结点 " << val2 << " 的父结点:" << parent->val << endl; else cout << endl << "结点 " << val2 << " 不存在,或无父节点" << endl; // 返回值为val的结点的兄弟结点 char val3 = 'E'; BiTNode<char>* sibling = BiT1->GetSibling(val3); if (sibling) cout << endl << "二叉树中结点 " << val3 << " 的兄弟结点:" << sibling->val << endl; else cout << endl << "结点 " << val3 << " 不存在,或无兄弟结点" << endl; // 返回值为val的结点的左子结点 char val4 = 'B'; BiTNode<char>* left_child = BiT1->GetLeftChild(val4); if (left_child) cout << endl << "二叉树中结点 " << val4 << " 的左子结点:" << left_child->val << endl; else cout << endl << "结点 " << val4 << " 不存在,或无左子结点" << endl; // 打印二叉树高度 cout << endl << "二叉树的高度:" << BiT1->GetHeight() << endl; delete BiT1; return 0; }
#pragma once
#include"stdafx.h"
/**
* @brief 创建一个二叉树类
*/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。