1.关于二叉树的前中后序快速排序

那就在这里拿这张图来演示一下怎样快速写出中序遍历,我们都知道中序遍历是,左子树,根,右子树

  1.                B                            A                      C
    
  2.   D                       E                                                      F
    
  3.                                     H
    
  4. 最后直接得出结果DBEHACF

2.二叉树的五种基本结构
拿代码表示:

typedef struct Node{int value;struct Node *left;              //既是左孩子,又同时代表着整颗左树struct Node *right;             //既是右孩子,又代表整颗右树
}void PreorderTraversal(Node *root) {  //定义一个函数,将一个树的根传进去if (root==NULL){return ;                    //如果传进去的树为空树,那么直接返回
}printf ("%d",root->value);      //否则打印根PreorderTraversal(root->left)           //打印完根然后只有左或者右不为空才会继续进行这两步,将左右子树作为根传进去PreorderTraversal(root->right)
}

关于递归函数,当函数执行完之后要是还被嵌套于其他函数中,则当前函数执行完毕,返回上一层函数继续执行,没有执行完的部分

//二叉树的前序遍历
int *p;
int size;
void _preorder(struct TreeNode *root){
if (root==NULL)
return ; //根
p[size++]=root->val;
_preorder(root->left); //左子树
_preorder(root->right); //右子树
}int *preorderTraversal(struct TreeNode *root,int *returnSize){
p=(int *)malloc(sizeof(int)*100*10000); //开辟一块空间
size=0;
_preorder (root);
*returnSize=size;
return p;
}

其实上面这段代码写的其实有一点繁琐,上面这段代码是靠返回值来打印整个树的,其实我们不必这样来打印一颗树,看下面这段代码,比较简单易懂。

void preorder(struct *root){
if (root==NULL)
return ;
printf ("%d",root ->value); //根
preorder (root->left); //左子树
preorder(root->right); //右子树
}

中序遍历其实和前序遍历都一样,只需要改变一点就可以了,前序遍历在我们创建的函数里面先是根再是左子树,再是根,接着才是右子树,所以我们在了解到,前序和中序的区别之后,我们就了解到,只需要把,前序遍历的顺改变就可以了,顺序为,左子树,根,右子树


void preorder(struct *root){
if (root==NULL)
return ;
preorder (root->left); //左子树
printf ("%d",root ->value); //根
preorder(root->right); //右子树
}

计算一棵树的结点个数,有两个思路,一个就是遍历,遍历的时候不为空,则结点个数加一,另外一个就是通过递归返回值来计算节点个数。

这里本人英文不是很好,函数名就拿拼音代替了


int size=0;
void jisuanjiediangeshu(struct *root){
if (root==NULL)
return ;
size++ //结点不为空则自增一
jisuanjiediangeshu(root->left); //左子树
jisuanjiediangeshu(root->right);//右子树
}

递推方式

int size(Node *root){
if (root ==NULL)
return 0;
size(root->left);
size(root->right);
return left+right+1;
}

利用递推公式来求叶子结点个数

int LeafSize(Node *root){
if(root==NULL)
return 0;
if (root->left==NULL&&root->right==NULL){
return 1;
}
LeafSize(root->left);
LeafSize(rroot->right);
return left+right;
}

求二叉树高度

int GetHeight (Node *root)
{
if (root==NULL)
return 0;
int left=GetHeight(root->left);
int right=GetRight(root->right);
return (left>right?left:right)+1;
}

关于二叉树这一块的递归都是,代码好写,也比较好理解,要仔细去体会每一个返回值,刚开始看的时候可能会有一点蒙蔽,边画图边理解,是一个不错的主意。
求第k层结点个数

int GetKLevelSize(Node *root,int k){
if (root==NULL)
return 0;
if (k===1)
return 1;
return  GetKLevelSize(root->left, k-1)+GetKLevelSize(root->right, k-1);
}//这个比较难理解,下去要慢慢理解

//二叉树结点中所有value都不重复
//找结点的value是v的结点
//如果找到了,返回v所在的地址
//如果没找到,返回NULL
//find返回NULL意味着没找到,返回非NULL,意味着找到了
//先确定根结点->左子树中是否包含-右子树中是否包含
//如果根结点就是,那么就不需要去左右子树查找
//如果 左子树找到就不需要去右子树找了

Node *Find(Node *root,int v){
if (root==NULL)return 0;
if (root->value==v)return root;
Node *result=Find(root->left,v);if (result!=NULL)return result;
Node *result=Find(root->right);if(result!=NULL)return result;
else{return NULL;}
}

入门二叉树,三种遍历,计算结点个数 ,深度 叶子结点个数,第k层结点个数相关推荐

  1. 剑指offer——复习1:二叉树三种遍历方式的迭代与递归实现

    剑指offer--复习1:二叉树三种遍历方式的迭代与递归实现 20180905更新:这个博客中的解法不是很好,看相应的LeetCode题目笔记~~~ 我感觉此博客中的说法更容易让人理解:https:/ ...

  2. 一文弄懂二叉树三种遍历

    作者 | 菠了个菜 责编 | 屠敏 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次. 在二叉树的遍历中存在三种较为常用的遍历方式:前序遍历.中 ...

  3. 二叉树三种遍历方式的非递归实现

    树的递归实现方式很简单,下面介绍三种遍历的非递归实现. 树的遍历有个特点,那就是在处理具体问题时,绝大多数情况下是在当前循环.或函数(或是子树)的根节点来处理的,能够注意到当前根节点是如何从上个根节点 ...

  4. 二叉树三种遍历方式,先序、中序、后序

    二叉树遍历方式分为三种:先序,中序和后序. 可以以根节点的位置为参考来记遍历方式,在第一个为先序,中间为中序,最后为后序: 即:先序: 根左右:中序:左根右:后序:左右根. 借个图: 之前看过一个视频 ...

  5. 二叉树三种遍历(递归以及非递归实现)

    package com.shiyeqiang.tree;import java.util.Stack;public class BiTree {public static void main(Stri ...

  6. 二叉树的前序中序后序三种遍历方式及递归算法介绍

    二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...

  7. 求二叉树中结点个数代码java_求二叉树中第K层结点的个数

    一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...

  8. 【数据结构】二叉树的节点总个数、叶子节点个数、第K层节点个数、二叉树的深度

    目录 1.结点总个数 1.1 局部静态变量法 思维 代码 不足之处 2.传指针法 程序代码 3.递归法 思想 程序代码 详细过程 2.叶子节点个数 思想 程序代码 3.第K层节点个数 思想 程序代码 ...

  9. c语言中二叉树中总结点,C语言二叉树的三种遍历方式的实现及原理

    二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个名字?是根据根节点的顺序命名的. 比如上图正常的一个满节点,A:根节点.B:左节点.C:右节点,前序顺序是ABC(根节点排最先,然后 ...

最新文章

  1. 推荐算法的先验算法的连接_数据挖掘专注于先验算法
  2. java.util.UnknownFormatConversionException: Conversion = ‘,‘ 解决
  3. python爬取elasticsearch内容
  4. Redis核心配置_Redis高级数据类型使用
  5. uselocale_Java扫描仪useLocale()方法与示例
  6. 网络协议:TCP连接管理
  7. SAP License:SAP S/4HANA Cloud [ERP 云]
  8. 整个技术架构结构设计
  9. 12. 星际争霸之php设计模式--模板模式
  10. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_12_创建多线程程序的第二种方式_实现Runnable接口...
  11. 前端饿了么UI messageBox二次封装,防止重复弹窗
  12. linux如何部署btsync同步?
  13. 太阳高度角计算题_正午太阳高度角的计算及应用
  14. ENVI遥感图像监督分类与出图制作
  15. web音视频播放器(html5)方案总结
  16. android studio实现动画,android studio上的基本动画实现(第一篇)
  17. Element UI(一)
  18. vue-shop 表格中使用树形控件 vue-table-width-tree-grid
  19. 网络游戏网络封包破解
  20. 微积分入门(SXT版)

热门文章

  1. java如何返回一个空数组?
  2. IT项目经理的个人知识管理(转)
  3. 俄罗斯、乌克兰程序员薪资曝光!年薪 15w+,女程序员比男程序员收入高
  4. php 聚合广告平台,GitHub - mystudytime/easy-amazon-advertising: 基于 amazon advertising v2 接口的 PHP 广告信息组件...
  5. 如何官网下载Eclipse历史版本
  6. 如何利用Python编程批量处理Excel来提高日常工作效率!
  7. Jenkins基础:获取Jenkins-Crumb的错误信息与对应方法
  8. android tips 8 | mystra,Mystra是什么意思
  9. aliyun的产品都是有哪些,主要是做什么的呢?
  10. 折弯公差尺寸及工艺要求