前序遍历重构二叉树

思路

  1. 整个二叉树用数组存储
  2. 因为先序遍历它先遍历根,再遍历左,左边没有跑完是不会去遍历右边的,所以遍历左子树,就是数组元素每回向后一个,个数-1
  3. 遍历右边时,就是数组起始位置+左子树跑到的位置+每次往后走一个,大小就是减去左子树用掉的个数+每回个数-1
  4. 因为要返回遍历的位置,和遍历用掉的个数,所以每回都要返回两个值,用结构体返回。
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct  TreeNode
{struct TreeNode *left;struct TreeNode *right;char val;
}TreeNode;typedef struct Result{TreeNode * root; //构建的树的根结点int used;      //构建过程中用掉的val个数
} Result;Result CreateTree(char preorder[], int size){if (size == 0){Result result;result.root = NULL;result.used = 0;return result;}char rootVal = preorder[0];if (rootVal == '#'){Result result;result.root = NULL;result.used = 1;    //'#'号在数组中也占一个位置return result;}//根的过程TreeNode * root = (TreeNode *)malloc(sizeof(TreeNode));root->val = rootVal;root->left = root->right = NULL;//左子树Result left_result = CreateTree(preorder + 1, size - 1);//右子树Result right_result = CreateTree(preorder + 1 + left_result.used, size - 1 - left_result.used);root->left = left_result.root;root->right = right_result.root;Result result;result.root = root;result.used = 1 + left_result.used + right_result.used;return result;
}void InorderTraversal(TreeNode * root){if (root == NULL){return;}InorderTraversal(root->left);printf("%c", root->val);printf(" ");InorderTraversal(root->right);
}void TestCreateTree()
{char preorder[200];scanf("%s", preorder);int size = strlen(preorder);Result result = CreateTree(preorder, size);InorderTraversal(result.root);
}int main()
{TestCreateTree();return 0;
}

求二叉树中所有结点的个数

思路

遍历整棵树,不是空结点,个数就++

void TreeSize(TreeNode *root, int *size){if (root == NULL){return;}(*size)++;TreeSize(root->left,size);TreeSize(root->right,size);}

思路2

根+左结点个数+右结点个数

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

二叉树题目----4 前序遍历重构二叉树 AND 求二叉树中所有结点的个数相关推荐

  1. 二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归)

    文章目录 二叉树的层序遍历 前序遍历 递归版本 非递归版本 中序遍历 递归版本 非递归版本 后序遍历 递归版本 非递归版本 二叉树的层序遍历 void printTree(BinaryTree* ar ...

  2. 二叉树已知前序遍历、中序遍历画出二叉树的形状

    前序遍历: 前序遍历(VLR)是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1)访问根 ...

  3. 二叉树题目---3 另一个树的子树 AND 二叉树最大深度

    另一个树的子树 思路 两个数都遍历一遍,找到一个根结点相同时,判断以这个根结点为首的二叉树是否相等 前序遍历 判断两棵树是否相同 对于返回值的处理是难点 bool isSameTree(struct ...

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

    二叉树遍历基础概念分析: 遍历:编写程序时,读取二叉树中内容的顺序(本人理解为此). 先序/中序/后序:二叉树的先序,中序,后序中的"先中后"是相对于"根"而言 ...

  5. 二叉树题目 ----7 前序中序遍历构造二叉树

    前序中序遍历构造二叉树 思路 在前序中找根结点 根据根结点 + 中序,分成左右两棵子树 根据子树长度,把前序分成左右两颗子树 递归处理子树 /*** Definition for a binary t ...

  6. 二叉树题目----1 前序中序后序遍历二叉树并返回相应的遍历(不是打印)

    前序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* s ...

  7. 二叉树:通过前序遍历与中序遍历序列输出二叉树的后序遍历序列

    题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树: 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树: 后序遍历: ...

  8. 二叉树的的前序遍历和后序遍历(题型变种更新中)

    变形一 BM32 合并二叉树 描述 已知两颗二叉树,将它们合并成一颗二叉树.合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替.例如: 两颗二叉树是:           ...

  9. 【二叉树迭代版前序遍历】LeetCode 144. Binary Tree Preorder Traversal

    LeetCode 144. Binary Tree Preorder Traversal Solution1:递归版 二叉树的前序遍历递归版是很简单的,前序遍历的迭代版相对是最容易理解的. 迭代版链接 ...

最新文章

  1. 深入浅出计算机组成原理学习笔记:高速缓存(下)-你确定你的数据更新了么?(第38讲)...
  2. AVCaptureMovieFileOutput 视频方向(锁定竖屏or不锁定都可以)
  3. Android开发教程之--sql语句一、创建/删除表Stringsql=Createtable
  4. Java中的推断异常
  5. 【kafka】Kafka消息压缩与解压与相关实验
  6. 使用expect编写脚本
  7. windows系统bat批处理 一键配置java jdk环境变量
  8. 比Google Map更加清晰的网络地图——RealBird
  9. matlab程序及C语言实现一维多元离散信源熵
  10. wsimport命令
  11. (简单控制) 关于使用NI max 的GPIB来控制安捷伦万用表34401A 的操作方法
  12. 服务器在外国那么登录网站算,国外服务器网站好吗?好在哪?
  13. PowerDesigner使用教程 —— 概念数据模型(CDM模型)
  14. Electron 使用 regedit 控制注册表(实现win文件右键菜单)
  15. 大学计算机英语要求,2015级本科生大学英语、计算机分级考试要求.doc
  16. 设计模式:工厂模式和建造者模式
  17. 《2018人工智能芯片技术白皮书》发布
  18. 军民链智合创:BitCEO.world比特维度全球CEO发展大会@台北HiFi++
  19. 基于 Traefik 的 ForwardAuth 配置
  20. JMeter安装及环境配置

热门文章

  1. 备忘录——通过RVA计算文件位置
  2. P4336 [SHOI2016]黑暗前的幻想乡
  3. 【转】 差分约束系统详解(转化为最短路) (概念)
  4. form表单,submit,ajax提交
  5. 敏捷自动化测试(1)—— 我们的测试为什么不够敏捷?
  6. QI实例-改变空间参考
  7. 【转】用BibTeX 写 Reference
  8. Google SSL zz
  9. awk 多文件操作2种实现方法
  10. 个人信息管理系统代码_Thymeleaf+SpringBoot+Mybatis实现的易游网旅游信息管理系统...