满二叉树

定义:高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树。


完全二叉树

定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上。这样的二叉树称为完全二叉树。
特点:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。显然,一棵满二叉树必定是一棵完全二叉树,而完全二叉树未必是满二叉树。


二叉搜索树

定义:在二叉搜索树中,任取一个节点A,A的值不小于它左子树上的任何值、它右子树上的每个值都大于A。

插入节点、删除树

/*二叉搜索树数据类型*/
struct TreeNode
{int data;TreeNode* left;TreeNode* right;
};
/*向二叉搜索树中添加一个节点*/
TreeNode* InsertTree(TreeNode* root, int value){//递归调用,所以要记得返回类型TreeNode* newNode;if(root == nullptr){newNode = new TreeNode;newNode->data = value;newNode->left = nullptr;newNode->right = nullptr;return newNode;}if(value < root->data)root->left = InsertTree(root->left, value);if(value > root->data)root->right = InsertTree(root->right, value);return root;
}
/*删除二叉树*/
void DeleteTree(TreeNode* root){if(root->left != nullptr)DeleteTree(root->left);if(root->right != nullptr)DeleteTree(root->right);delete root;return;
}

广度优先遍历(BFS)

算法流程:
1. 根节点入队
2. 循环判断当前队列非空,访问队首,出队
3. 如果左子树非空,左子树根节点入队
4. 如果右子树非空,右子树根节点入队
代码:

vector<int> BFS(TreeNode* root){std::vector<<int> sequence;queue<TreeNode*> q;q.push(root);while(!q.empty()){TreeNode* tmp = q.front();sequence.push_back(tmp->data);q.pop();if(tmp->left != nullptr)q.push(tmp->left);if(tmp->right != nullptr)q.push(tmp->right);}return sequence;
}

深度优先遍历(DFS)

深度优先遍历。有四种遍历方式:先根,后根,左子树优先,右子树优先

(1)先根顺序遍历:a. 访问根节点 b. 遍历左子树 c. 遍历右子树
(2)后根顺序遍历:a. 遍历左子树 b. 遍历右子树 c. 访问根节点
(3)左子树优先遍历:a. 遍历左子树 b. 访问根节点 c.遍历右子树
(4)右子树优先遍历:a.遍历右子树 b.访问根节点 c.遍历左子树

/*先根遍历代码*/
/*其余遍历方式相似,调换访问顺序即可*/
void FLRTraverse(TreeNode *root){printf("%d", root->val); //访问根节点if(root->left != NULL)FLRTraverse(root->left); //遍历左子树if(root->right != NULL)FLRTraverse(root->right); //遍历右子树
}

二叉搜索树(BFS)总结相关推荐

  1. PAT甲级1099 Build A Binary Search Tree (30分):[C++题解]建立二叉搜索树、dfs和bfs

    文章目录 题目分析 题目链接 题目分析 题意重述:给定一棵二叉树的结构,和待填的数值,请将数据填到二叉树中的结点中,使之满足二叉搜索树的性质. 然后按照层序遍历输出数值. 分析: 本题分两步. 第一步 ...

  2. [剑指offer]面试题第[68-1]题[Leedcode][JAVA][第235题][二叉搜索树的最近公共祖先][递归][BFS]

    [问题描述][第235题][二叉搜索树的最近公共祖先][简单] 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...

  3. PAT甲级1115 Counting Nodes in a BST (30分):[C++题解] 递归建二叉搜索树、dfs求一层结点数量

    文章目录 题目分析 题目链接 题目分析 分析 首先本题给定的二叉搜索树的定义和其他地方的不同.本题小于等于的是左子树,右子树是大于根结点的. 然后说一下做题的思路. 给定一串数据,让构造二叉搜索树. ...

  4. 中石油训练赛 - Insertion Order(二叉搜索树+构造)

    题目大意:构造出一个长度为 n 的排列,使得按照这个顺序构造出的二叉搜索树的高度为 k 题目分析:知道 n 的大小后不难算出其可以构造的二叉搜索树高度的可行范围,下限是一棵满二叉树,这个利用倍增很快就 ...

  5. 数据结构与算法之二叉搜索树

    与链表不同,树是一种非线性的数据结构.树中最常用的是二叉树,二叉树限制了子树的数量,也就是每个结点的子树至多2个,并且这两个子树是有顺序的.而二叉搜索树(二叉查找树,二叉排序树)是指根节点的关键字大于 ...

  6. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]

    [问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...

  7. 二叉搜索树的删除操作可以交换吗_一文看懂数据结构中的树

    通常在开始学编程的时候,你会接触一些常用数据结构.到最后一般会学到哈希表.对于修读计算机科学学位的朋友,你通常要上专门的数据结构课,从了解有关链表.队列和栈的各种知识.这些统称为线性数据结构,因为依逻 ...

  8. 广度优先搜索生成树怎么画_LeetCode0938: 二叉搜索树的范围和

    题目介绍 描述: 给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和. 二叉搜索树保证具有唯一的值. 示例 1:输入:root = [10,5,15,3,7,null,18 ...

  9. 使用C++实现二叉搜索树的数据结构

    需要注意的地方: ①二叉搜索树删除一个指定结点R,若R为叶子结点,则将R的父结点中指向R的指针改为指向nullptr:若R的左右子结点一个为空,一个非空,则将R的父结点中指向R的指针改为指向R的非空子 ...

最新文章

  1. 文件操作的常用命令 -- grep, cut, sed
  2. mysql从一张表更新另外一张表_MySQL 从一张表update字段到另外一张表中
  3. [转]项目经理面试指南
  4. [IE9] GPU硬件加速到底是实用创新还是噱头
  5. 字符串之替换字符串中连续出现的指定字符串
  6. mybatis简单案例源码详细【注释全面】——Utils层(MybatisUtils.java)
  7. 编程之美 set 8 区间重合判断
  8. php ajax跳转,ajax接口的php文件如何实现跳转
  9. ESP32-IDF给FATFS添加长文件名支持,更改_USE_LFN以支持大于8.3格式的文件名
  10. 【转】JavaScript中的this关键字使用的四种调用模式
  11. 影响SQL server性能的关键
  12. 《实战》基于情感词典的文本情感分析与LDA主题分析
  13. 文献基础知识、ISI、SCI、JCR
  14. excel做地图热力图_如何用excel制作中国地图热力数据图
  15. cygwin mysql_cygwin 安装 mysql
  16. 打印html并去掉页眉页脚
  17. office2019_word_多级标题(四级以上heading的配置)/自定义样式heading style
  18. 《朱子治家格言》原文
  19. 虚拟示波器软件 JSCOPE -- 使用 jlink 仿真器来查看变量
  20. html,canvas——星星闪烁

热门文章

  1. 注意区分啊~这里求的的事公共子串不是子序列。NOJ308-Substring
  2. CSS---内外边距
  3. centos7 hadoop 2.8安装
  4. 网络编程 UDP套接字
  5. 西数举债千亿收购闪迪 到底图了个啥?
  6. iOS开发之裁剪圆形头像
  7. Hibernate学习(三)
  8. 把一个中文日期时间格式字符串转为日期时间
  9. Struts2 自定义拦截器(方法拦截器)
  10. 关于遗留系统维护的讨论