144. 二叉树的前序遍历

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9.  
  10. /**
  11. * Note: The returned array must be malloced, assume caller calls free().
  12. */
  13.  
  14. // 递归
  15. void Preorder(struct TreeNode* root, int* array, int* returnSize)
  16. {
  17. if (root == NULL) {
  18. return;
  19. }
  20. array[(*returnSize)++] = root->val;
  21. Preorder(root->left, array, returnSize);
  22. Preorder(root->right, array, returnSize);
  23. }
  24.  
  25. int* preorderTraversal(struct TreeNode* root, int* returnSize)
  26. {
  27. int *res = (int *)malloc(sizeof(int) * 100);
  28. *returnSize = 0;
  29. Preorder(root, res, returnSize);
  30. return res;
  31. }

145. 二叉树的后序遍历

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9.  
  10. /**
  11. * Note: The returned array must be malloced, assume caller calls free().
  12. */
  13. void Postorder(struct TreeNode* root, int* array, int* returnSize)
  14. {
  15. if (root == NULL) {
  16. return;
  17. }
  18. Postorder(root->left, array, returnSize);
  19. Postorder(root->right, array, returnSize);
  20. array[(*returnSize)++] = root->val;
  21. }
  22.  
  23. int* postorderTraversal(struct TreeNode* root, int* returnSize)
  24. {
  25. int *res = (int *)malloc(sizeof(int) * 100);
  26. *returnSize = 0;
  27. Postorder(root, res, returnSize);
  28. return res;
  29. }

105. 从前序与中序遍历序列构造二叉树

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9.  
  10. struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize)
  11. {
  12. if (preorder == NULL || inorder == NULL) {
  13. return NULL;
  14. }
  15. if (preorderSize == 0 || inorderSize == 0) {
  16. return NULL;
  17. }
  18. if (preorderSize != inorderSize) {
  19. return NULL;
  20. }
  21.  
  22. struct TreeNode *res = (struct TreeNode *)malloc(sizeof(struct TreeNode));
  23. int rootVal = preorder[0];
  24. int leftLen = 0;
  25. for (int i = 0; i < inorderSize; i++) {
  26. if (rootVal == inorder[i]) {
  27. leftLen = i;
  28. break;
  29. }
  30. }
  31. int rightLen = inorderSize - leftLen - 1;
  32.  
  33. res->val = rootVal;
  34. res->left = buildTree(&preorder[1], leftLen, inorder, leftLen);
  35. res->right = buildTree(&preorder[leftLen + 1], rightLen, &inorder[leftLen + 1], rightLen);
  36. return res;
  37. }

106. 从中序与后序遍历序列构造二叉树

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9.  
  10. struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize)
  11. {
  12. if (inorder == NULL || postorder == NULL) {
  13. return NULL;
  14. }
  15. if (inorderSize == 0 || postorderSize == 0) {
  16. return NULL;
  17. }
  18. if (inorderSize != postorderSize) {
  19. return NULL;
  20. }
  21.  
  22. struct TreeNode* res = (struct TreeNode *)malloc(sizeof(struct TreeNode));
  23. int rootVal = postorder[postorderSize - 1];
  24. int leftNum = 0;
  25. int rightNum = 0;
  26. for (int i = 0; i < inorderSize; i++) {
  27. if (rootVal == inorder[i]) {
  28. leftNum = i;
  29. break;
  30. }
  31. }
  32. rightNum = inorderSize - leftNum - 1;
  33. res->val = rootVal;
  34. res->left = buildTree(inorder, leftNum, postorder, leftNum);
  35. res->right = buildTree(&inorder[leftNum + 1], rightNum, &postorder[leftNum], rightNum);
  36. return res;
  37. }

c语言刷 DFS题记录的更多相关文章

  1. C语言刷数组题记录

    讲解:https://mp.weixin.qq.com/s/weyitJcVHBgFtSc19cbPdw 二分法: 704. 二分查找 int search(int* nums, int numsSi ...

  2. c语言刷 队列题记录

    622. 设计循环队列 https://blog.csdn.net/Galaxy_n/article/details/115978544 typedef struct { int *arrs; int ...

  3. c语言刷 链表题记录

    61. 旋转链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode * ...

  4. 用PHP语言刷OJ题

    平常在学校都是用C,C++,Java来刷OJ题,把AC的题用不同的语言再AC一次,基本相当于翻译而已.看到学校的OJ支持提交PHP代码,于是尝试了一下. 首先,得会使用PHP,但是你如果在看这篇博客, ...

  5. 8.20~8.25刷散题记录 By cellur925

    记录一些散题 / 价值不大但还是想记下来的题目 / 没正八经写博客的题目 8.24 Luogu P1508 沙雕题数字三角形的二维升级版,但是注意阅读理解,李大水牛从桌子最后一行下侧开始吃,而本题是自 ...

  6. c语言刷 设计题合计

    355. 设计推特 #define MAX_LEN 512 struct User { int userId; int followee[MAX_LEN]; // 散列表,0/1,1表示这个user被 ...

  7. PE刷题记录

    PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...

  8. SPOJ 刷题记录

    按点赞数降序 297 二分 #include<bits/stdc++.h> using namespace std; #define fi first #define se second ...

  9. 刷题记录:[SUCTF 2019]CheckIn

    目录 刷题记录:[SUCTF 2019]CheckIn 一.涉及知识点 1.利用.user.ini上传\隐藏后门 2.绕过exif_imagetype()的奇技淫巧 二.解题方法 刷题记录:[SUCT ...

随机推荐

  1. Flink 如何通过2PC实现Exactly-once语义 (源码分析)

    Flink通过全局快照能保证内部处理的Exactly-once语义 但是端到端的Exactly-once还需要下游数据源配合,常见的通过幂等或者二阶段提交这两种方式保证 这里就来分析一下Sink二阶段 ...

  2. checklist 编写指南

    checklist 编写工具 checklist文档格式推荐使用思维导图.比如 MindMaster 和 processon.我喜欢用这些平台或者软件的思维导图大纲模式来编写 checklist. c ...

  3. 类加载器(JVM)

    一.JVM概述 JVM是java是二进制字节码的运行环境 特点: 一次编译,到处运行(跨平台) 自动内存管理 自动垃圾回收功能 常见的JVM Sun Classic VM:世界上第一款商用的java虚 ...

  4. 计算机开放电子书 2021 RC2

    下载方式 pip install CDNDrive # 或 # pip install git+https://github.com/apachecn/CDNDrive cdrive download ...

  5. EKS助力小白实践云原生——通过k8s部署wordpress应用

    目前云原生在大厂已经有了充分的实践,也逐渐向小厂以及非互联网公司推广.适逢12月20日,腾讯云原生[燎原社]精心打造了云原生在线技术工坊,让零基础的同学也能快速入门和实践 Docker 和 Kuber ...

  6. C字符串倒置-中部对称

    问题如图 Code #include<stdio.h> #include<string.h> #define MAX_LENGTH 10//最大字符串长度 void inver ...

  7. div 根据内容自适应内容

    转载请注明来源:https://www.cnblogs.com/hookjc/ #header{ MARGIN: 0px; BORDER: 0px; BACKGROUND: #ccd2de; WIDT ...

  8. element-ui 使用 Select 组件给 value 属性绑定对象类型

    qq_36437172 2020-06-28 22:38:49  778  收藏 分类专栏: element-ui 文章标签: element-ui Select 组件 value 属性 绑定 对象类 ...

  9. 使用 Element UI Select 组件的 value-key 属性,让绑定值可以为一个对象

    EsunR 2019-11-07 12:14:42  12264  收藏 6 分类专栏: Vue 文章标签: element-ui 版权 当我们使用 Elemet UI 的选择组件进行多选时,Sele ...

  10. Javascript疑问【长期更新】

    1.插入 Javacript 的正确位置是? 答:<body> 部分和 <head> 部分均可. 2.外部脚本必须包含 <script> 标签吗? 答:外部脚本不能 ...