//前序
//用广度搜索
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++实现二叉树操作相关推荐

  1. 二叉树查找结点c语言_二叉树操作详解

    (给C语言与CPP编程加星标,提升C/C++技能) 来源:https://segmentfault.com/a/1190000008850005 [导读]:树是数据结构中的重中之重,尤其以各类二叉树为 ...

  2. java 容器、二叉树操作、107

    二叉树本身固有的递归性质,通常可以用递归算法解决,虽然递归代码简介,但是性能不如非递归算法. 常用的操作是构建二叉树.遍历二叉树(先序.中序.后序.都属于DFS深度优先搜索算法,使用栈来实现),广度优 ...

  3. 数据结构实验课:实验五、二叉树操作及应用

    实验五.二叉树操作及应用 一. 实验目的 掌握二叉树的定义.结构特征,以及各种存储结构的特点及使用范围,各种遍历算法.掌握用指针类型描述.访问和处理二叉树的运算.掌握前序或中序的非递归遍历算法. 二. ...

  4. 二叉树操作篇 -- 重建二叉树

    题目描述 根据给定的前序遍历和中序遍历,重建二叉树并返回头结点 牛客网题目地址:NC12 重建二叉树 **输入:**以数组形式给定前序遍历和中序遍历,如前序遍历序列[1,2,4,7,3,5,6,8]. ...

  5. java 实现二叉树操作

    java实现二叉树的创建.先序遍历.中序遍历.后序遍历及二叉树的深度 public class Tree { private int data;// 数据节点  private Tree left;/ ...

  6. 数据结构实验(C++实现):二叉树操作

    实验要求: 输入一个完全二叉树的层次遍历字符串,创建这个二叉树,输出这个二叉树的前序遍历字符串.中序遍历字符串.后序遍历字符串.结点数目.二叉树高度(上述每一个结果独立一行显示). 输入二叉树前序序列 ...

  7. 百练+二叉树操作+直接找到父节点,然后交换左右儿子,递归

    点击打开链接 #include<stdio.h> #include<stdlib.h> #include<iostream> #include<string. ...

  8. C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)

    今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...

  9. 二叉树的各种操作(转)

    本文 转自:https://61mon.com/index.php/archives/191/comment-page-2#menu_index_21 二叉树的各种操作(面试必备) 本篇针对面试中常见 ...

最新文章

  1. js 拖动层示例[转]
  2. Centos显示-bash-4.1$问题的修复及原因探究
  3. 【Python】青少年蓝桥杯_每日一题_7.11_画太阳
  4. Shell中的for循环
  5. Spring mvc DispatchServlet 实现机制
  6. mysql ddl 锁_MySQL Online DDL导致全局锁表案例分析
  7. rebase冲突解决
  8. 2019.01.13 bzoj4137: [FJOI2015]火星商店问题(线段树分治+可持久化01trie)
  9. git SSL certificate problem: unable to get local issuer certificate
  10. 4.linux 命令行 光标移动技巧
  11. 精彩收集的303个透明flash代码
  12. windows10 快捷代码
  13. 优秀的linux学习网站
  14. ES文件浏览器 v4.1.8.1 破解高级版
  15. Premiere Pro cc 2019 学习笔记
  16. html 输入年份,判断是否是闰年
  17. MAT无法打开较大的hprof的解决办法
  18. 整合SEO和UEO也许才是SEOer的出路
  19. 阿里云搭建wordpress生产级CMS网站实践
  20. 1075 PAT Judge 测试点四

热门文章

  1. In Compiler.php line 36: Please provide a valid cache path.
  2. 苹果再次拒绝协助美国政府解锁纽约毒品案中的iPhone
  3. java学习笔记16--异常
  4. vim高级技巧(split)_小花_新浪博客
  5. oracle 日志 LogMiner
  6. 用SQL Server 监控 OS Server 的Task Management信息
  7. 北大青鸟组建与维护企业网络高级技术PPT课件
  8. 数据库,XML,MDB --- 我们来TXT...
  9. java常见排序算法有哪些_Java中常用的6种排序算法详细分解
  10. 数据库中where与having区别~~~