c++实现二叉树操作
//前序
//用广度搜索
template
void AVLTree::preOrder(AVLTreeNode* tree) const
{
/**********递归形式走/
//if (nullptr != tree)
//{
// cout << tree->key << " ";
// preOrder(tree->left);
// preOrder(tree->right);
//}
if (tree == nullptr) {
return;
}
std::queue<AVLTreeNode>que;
que.push(tree);
while (!que.empty()) {
AVLTreeNode temp = que.front();
std::cout << temp->key << std::endl;
que.pop();
if (temp->left != nullptr){
que.push(temp->left);
}
if (temp->right != nullptr){
que.emplace(temp->right);
}
}
}
//中序遍历
//用深度搜索,层次遍历
template
void AVLTree::inOrder(AVLTreeNode* tree) const
{
//递归形式
//if (nullptr != tree)
//{
// inOrder(tree->left);
// cout << tree->key << " ";
// inOrder(tree->right);
//}
if (tree== nullptr){
return;
}
std::stack<AVLTreeNode*>stacks;
//保存父节点先
while (tree != nullptr || !stacks.empty()){
if (tree != nullptr){
stacks.emplace(tree);
tree = tree->left;
}else {
AVLTreeNode* ptr = stacks.top();
std::cout << ptr->key << std::endl;
stacks.pop();
tree = ptr->right;
}
}
}
//深度搜索,后序遍历
template
void AVLTree::postOrder(AVLTreeNode* tree) const
{
//递归的方式遍历
//if (nullptr != tree)
//{
// postOrder(tree->left);
// postOrder(tree->right);
// cout << tree->key << " ";
//}
if (tree == nullptr){
return;
}
std::stack<AVLTreeNode*>stacks1;
stacks1.emplace(tree);
std::stack<AVLTreeNode*>stacks2;
while (!stacks1.empty()){
AVLTreeNode* tmp = stacks1.top();
stacks1.pop();
stacks2.emplace(tmp);
if (tmp->left != nullptr){
stacks1.emplace(tmp->left);
}
if (tmp->right){
stacks1.emplace(tmp->right);
}
}
while (!stacks2.empty()){
AVLTreeNode* tmp = stacks2.top();
stacks2.pop();
std::cout << tmp->key << std::endl;
}
}
//非递归查找
template
typename AVLTree::iterative_search(AVLTreeNode* root, T key) const
{
while (root != nullptr && key != root->key) {
//如果查找小于当前值,就往左边查找
if (key < root->key) {
root = root->left;
continue;
}
//如果查找值大于当前值,就往右边查找
if (key > root->key) {
root = root->right;
continue;
}
}
return root;
}
// 销毁AVL树
//可以用广度搜索销毁树
template
void AVLTree::destroy(AVLTreeNode*& tree)
{
if (tree == nullptr) {
return;
}
std::queue<AVLTreeNode*>que;
que.emplace(tree);
while (!que.empty()){
tree = que.front();
que.pop();
if (tree->left != nullptr){
que.emplace(tree->left);
}
if (tree->right != nullptr){
que.emplace(tree->right);
}
tree->left = nullptr;
tree->right = nullptr;
delete tree;
tree = nullptr;
}
}
c++实现二叉树操作相关推荐
- 二叉树查找结点c语言_二叉树操作详解
(给C语言与CPP编程加星标,提升C/C++技能) 来源:https://segmentfault.com/a/1190000008850005 [导读]:树是数据结构中的重中之重,尤其以各类二叉树为 ...
- java 容器、二叉树操作、107
二叉树本身固有的递归性质,通常可以用递归算法解决,虽然递归代码简介,但是性能不如非递归算法. 常用的操作是构建二叉树.遍历二叉树(先序.中序.后序.都属于DFS深度优先搜索算法,使用栈来实现),广度优 ...
- 数据结构实验课:实验五、二叉树操作及应用
实验五.二叉树操作及应用 一. 实验目的 掌握二叉树的定义.结构特征,以及各种存储结构的特点及使用范围,各种遍历算法.掌握用指针类型描述.访问和处理二叉树的运算.掌握前序或中序的非递归遍历算法. 二. ...
- 二叉树操作篇 -- 重建二叉树
题目描述 根据给定的前序遍历和中序遍历,重建二叉树并返回头结点 牛客网题目地址:NC12 重建二叉树 **输入:**以数组形式给定前序遍历和中序遍历,如前序遍历序列[1,2,4,7,3,5,6,8]. ...
- java 实现二叉树操作
java实现二叉树的创建.先序遍历.中序遍历.后序遍历及二叉树的深度 public class Tree { private int data;// 数据节点 private Tree left;/ ...
- 数据结构实验(C++实现):二叉树操作
实验要求: 输入一个完全二叉树的层次遍历字符串,创建这个二叉树,输出这个二叉树的前序遍历字符串.中序遍历字符串.后序遍历字符串.结点数目.二叉树高度(上述每一个结果独立一行显示). 输入二叉树前序序列 ...
- 百练+二叉树操作+直接找到父节点,然后交换左右儿子,递归
点击打开链接 #include<stdio.h> #include<stdlib.h> #include<iostream> #include<string. ...
- C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)
今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...
- 二叉树的各种操作(转)
本文 转自:https://61mon.com/index.php/archives/191/comment-page-2#menu_index_21 二叉树的各种操作(面试必备) 本篇针对面试中常见 ...
最新文章
- js 拖动层示例[转]
- Centos显示-bash-4.1$问题的修复及原因探究
- 【Python】青少年蓝桥杯_每日一题_7.11_画太阳
- Shell中的for循环
- Spring mvc DispatchServlet 实现机制
- mysql ddl 锁_MySQL Online DDL导致全局锁表案例分析
- rebase冲突解决
- 2019.01.13 bzoj4137: [FJOI2015]火星商店问题(线段树分治+可持久化01trie)
- git SSL certificate problem: unable to get local issuer certificate
- 4.linux 命令行 光标移动技巧
- 精彩收集的303个透明flash代码
- windows10 快捷代码
- 优秀的linux学习网站
- ES文件浏览器 v4.1.8.1 破解高级版
- Premiere Pro cc 2019 学习笔记
- html 输入年份,判断是否是闰年
- MAT无法打开较大的hprof的解决办法
- 整合SEO和UEO也许才是SEOer的出路
- 阿里云搭建wordpress生产级CMS网站实践
- 1075 PAT Judge 测试点四
热门文章
- In Compiler.php line 36: Please provide a valid cache path.
- 苹果再次拒绝协助美国政府解锁纽约毒品案中的iPhone
- java学习笔记16--异常
- vim高级技巧(split)_小花_新浪博客
- oracle 日志 LogMiner
- 用SQL Server 监控 OS Server 的Task Management信息
- 北大青鸟组建与维护企业网络高级技术PPT课件
- 数据库,XML,MDB --- 我们来TXT...
- java常见排序算法有哪些_Java中常用的6种排序算法详细分解
- 数据库中where与having区别~~~