二叉树的构造与遍历
来源:互联网 发布:北京java培训那好 编辑:程序博客网 时间:2024/05/22 12:32
二叉树的构造与遍历
二叉树是指一个树结点最多只有两个子结点的数据结构,分别称为左子结点,右子结点。抽象来看每个结点拥有左子树、右子树。本文所记录的二叉树的构造与遍历均为递归定义。
1.定义结点类
struct TreeNode{ int data; TreeNode *lchild, *rchild; TreeNode(int x = '#') :data(x) {}};
2.定义二叉树类
class BinTree{public: BinTree(); ~BinTree(); void creatTree(TreeNode *&root); void clearTree(TreeNode *&root); bool TreeEmpty(); int TreeDepth(TreeNode *root); TreeNode *rootNode(); int nodeValue(TreeNode *node); void assignNode(TreeNode *node,int val); TreeNode *parentNode(TreeNode *root, TreeNode *node); TreeNode *lchildNode(TreeNode *node); TreeNode *rchildNode(TreeNode *node); void preTraverse(TreeNode *root); void midTraverse(TreeNode *root); void postTraverse(TreeNode *root); void setFactors(std::vector<int> nums); void showFactors(); int getIndex();private: TreeNode *root; std::vector<int> factors; int index;};
3.方法实现
#include "BiTreeLink.h"BinTree::BinTree(){ // this->root = new TreeNode this->root = nullptr; this->index = 0;}BinTree::~BinTree(){ clearTree(this->root);}void BinTree::creatTree(TreeNode *&root){ /*if (this->index >= this->factors.size()) { return; }*/ auto p = (this->index)++; if (this->factors.at(p) == '#') { // return; // TreeNode *root = new TreeNode(); root = nullptr; //root = new TreeNode(); } else { root = new TreeNode(factors.at(p)); creatTree(root->lchild); creatTree(root->rchild); }}void BinTree::clearTree(TreeNode *&root){ if (root) { if (root->lchild) { clearTree(root->lchild); } if (root->rchild) { clearTree(root->rchild); } delete root; root = nullptr; }}bool BinTree::TreeEmpty(){ return this->root == nullptr;}int BinTree::TreeDepth(TreeNode *root){ int i, j; if (!root) { return 0; } if (root->lchild) { i = TreeDepth(root->lchild); } else { i = 0; } if (root->rchild) { j = TreeDepth(root->rchild); } else { j = 0; } return i > j ? i + 1 : j + 1;}TreeNode * BinTree::rootNode(){ return this->root;}int BinTree::nodeValue(TreeNode *node){ if (!TreeEmpty()) { std::cout << node->data << std::endl; } return node->data;}void BinTree::assignNode(TreeNode *node,int val){ if (val != 0xFFFF && node) { node->data = val; }}TreeNode * BinTree::parentNode(TreeNode *root, TreeNode *node){ if (root && node) { if (root->lchild == node || root->rchild == node) { return root; } else { parentNode(root->lchild, node); parentNode(root->rchild, node); } }}TreeNode * BinTree::lchildNode(TreeNode *node){ return node->lchild;}TreeNode * BinTree::rchildNode(TreeNode *node){ return node->rchild;}void BinTree::preTraverse(TreeNode *root){ if (!root) { return; } std::cout << root->data << std::endl; preTraverse(root->lchild); preTraverse(root->rchild);}void BinTree::midTraverse(TreeNode *root){ if (!root) { return; } midTraverse(root->lchild); std::cout << root->data << std::endl; midTraverse(root->rchild);}void BinTree::postTraverse(TreeNode *root){ if (!root) { return; } postTraverse(root->lchild); postTraverse(root->rchild); std::cout << root->data << std::endl;}void BinTree::setFactors(std::vector<int> nums){ for (auto &n : nums) { this->factors.push_back(n); }}void BinTree::showFactors(){ for (auto &f : this->factors) { std::cout << f << "=>"; } std::cout << "END" << std::endl;}int BinTree::getIndex(){ return this->index;}
1 0
- 完全二叉树的构造与遍历
- 排序二叉树的构造与遍历
- 二叉树的构造与遍历
- 二叉树的构造与遍历
- 二叉树的构造与遍历
- 二叉树构造与遍历
- 二叉树的构造 遍历
- 二叉查找树的构造与遍历[Java实现]
- 二叉树构造与遍历的C程序实现代码
- 二叉查找树的构造与遍历[Java实现]
- 遍历构造二叉树
- 二叉树 --- 树的构造和遍历
- 二叉查找树的构造及其遍历
- 二叉树的构造和遍历
- 二叉树的构造及遍历
- 二叉树的构造,递归遍历,非递归遍历
- 二叉树构造:二叉树的广度优先遍历
- 二叉树 三种遍历构造二叉树+层次遍历 题目 PAT 树的遍历
- Java---Eclipse中Server Locations灰色,无法修改
- VS2015在release模式下进行调试
- LeetCode:求两个整数的汉明距离
- 获取linux下CPU、网卡、硬盘ID
- 浅析计算机中汇编代码是怎么执行的
- 二叉树的构造与遍历
- 实现单向链表的有关操作
- LBP简介
- C++第1次实验-标准体重
- Android安全之不安全日志输出
- TCP流量控制-滑动窗口
- 给你的安卓app添加下拉刷新功能吧!
- 人工蚁群算法
- java基础 —— 时间格式化