c++经典例题之先序二叉树的构建
导读:收集整理的这篇文章主要介绍了c++经典例题之先序二叉树的构建,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章小编将带大家一起回顾经典C++之构建先序二叉树,有兴趣的小伙伴一起来复习一下吧!二叉树首先要解决构建问题,才能考虑后续的遍...
收集整理的这篇文章主要介绍了c++经典例题之先序二叉树的构建,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章小编将带大家一起回顾经典C++之构建先序二叉树,有兴趣的小伙伴一起来复习一下吧!二叉树首先要解决构建问题,才能考虑后续的遍历,这里贴出通过先序构建二叉树,同时包含四种二叉树的遍历方法(先序,中序,后序,逐层)
第一、定义BinaryTreeNode 类
#include iostream> #include string> #include queue> using namespace std; templatetyPEname T > class BinaryTree; template typename T> class BinaryTreeNode { public: friend class BinaryTreeT> ; BinaryTreeNode() { data = NULL; lChild = rChild = NULL; } BinaryTreeNode(T newdata) { this-> data = newdata; lChild = rChild = NULL; } T getData() { return data; } BinaryTreeNodeT> * getLeftNode() { return lChild; } BinaryTreeNodeT> * getRightNode() { return rChild; } T data; BinaryTreeNodeT> * lChild; BinaryTreeNodeT> * rChild; PRivate:} ;
View Code
第二、定义BinaryTree 类
template typename T> class BinaryTree { public: BinaryTreeNodeT> *root; char* p; BinaryTree() { root = NULL; } BinaryTree(T data) { root = new BinaryTreeNodeT> (data); root-> lChild = NULL; root-> rChild = NULL; } ~BinaryTree() { delete root; } //构建二叉树并返回 BinaryTreeNodeT> * CreateTree() { BinaryTreeNodeint> * BT = NULL; char t; cin > > t; if (t == '#') { return NULL; } else { int num = t - '0'; bt = new BinaryTreeNodeT> (num); bt-> lChild = CreateTree(); bt-> rChild = CreateTree(); } return bt; } //先序构建二叉树 BinaryTreeNodeT> * PreCreateTree() { BinaryTreeNodeint> * bt = NULL; if (this-> root == NULL) { cout "请输入根节点(#代表空树):"; } else { cout "请输入节点(#代表空树):"; } char t; cin > > t; if (t == '#') { return NULL; } else { int num = t - '0'; bt = new BinaryTreeNodeT> (num); if (this-> root == NULL) { this-> root = bt; } cout bt-> data "的左孩子"; bt-> lChild = PreCreateTree(); cout bt-> data "的右边孩子"; bt-> rChild = PreCreateTree(); } return bt; } void preOderTraversal(BinaryTreeNodeT> *bt); //先序遍历 void inOrderTraversal(BinaryTreeNodeT> *bt); //中序遍历 void postOrderTraversal(BinaryTreeNodeT> *bt); //后序遍历 void levelTraversal(BinaryTreeNodeT> *bt); //逐层遍历private:} ; template typename T> void BinaryTreeT> ::preOderTraversal(BinaryTreeNodeT> *bt) { if (bt) { cout bt-> data; BinaryTreeT> ::preOderTraversal(bt-> getLeftNode()); BinaryTreeT> ::preOderTraversal(bt-> getRightNode()); } } template typename T> void BinaryTreeT> ::inOrderTraversal(BinaryTreeNodeT> *bt) { if (bt) { BinaryTreeT> ::inOrderTraversal(bt-> getLeftNode()); cout bt-> data; BinaryTreeT> ::inOrderTraversal(bt-> getRightNode()); } } template typename T> void BinaryTreeT> ::postOrderTraversal(BinaryTreeNodeT> *bt) { if (bt) { BinaryTreeT> ::postOrderTraversal(bt-> getLeftNode()); BinaryTreeT> ::postOrderTraversal(bt-> getRightNode()); cout bt-> data; } } template typename T> void BinaryTreeT> ::levelTraversal(BinaryTreeNodeT> *bt) { queueBinaryTreeNodeT> *> que; que.push(bt); while (!que.empty()) { BinaryTreeNodeT> * proot = que.front(); que.pop(); cout proot-> data; if (proot-> lChild != NULL) { que.push(proot-> lChild); //左孩子入队 } if (proot-> rChild != NULL) { que.push(proot-> rChild); //右孩子入队 } } }
View Code
第三、主程序运行
#include "pch.h"#include iostream> #include "BinaryTree.h"int main(){ //场景测试2 BinaryTreeint> btree; btree.PreCreateTree(); //先序构建二叉树 cout "先序遍历:"; btree.preOderTraversal(btree.root); cout endl; //先序遍历 cout "中序遍历:"; btree.inOrderTraversal(btree.root); cout endl; //中序遍历 cout "后序遍历:"; btree.postOrderTraversal(btree.root); cout endl; //后序遍历 cout "逐层序遍历:"; btree.levelTraversal(btree.root); }
View Code
最终测试运行截图
相关教程:C++视频教程
以上就是c++经典例题之先序二叉树的构建的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: c++经典例题之先序二叉树的构建
本文地址: https://pptw.com/jishu/593493.html