leetcode关于微信读书的笔记-二叉树问题
发布日期:2021-05-04 18:23:18 浏览次数:14 分类:精选文章

本文共 1668 字,大约阅读时间需要 5 分钟。

1.分别用递归和非递归方式实现二叉树先序、中序和后序遍历

思路:
先序遍历顺序为根、左、右;
中序遍历顺序为左、根、右;
后序遍历顺序为左、右、根。
先序:(其他就是void函数里面的遍历顺序调换)

* struct TreeNode {    *     int val; *     struct TreeNode *left; *     struct TreeNode *right; * }; *//** * Note: The returned array must be malloced, assume caller calls free(). */void preorder(struct TreeNode*root,int *res,int *reSize){       if(root==NULL){           return ;    }    res[(*reSize)++]=root->val;    preorder(root->left,res,reSize);    preorder(root->right,res,reSize);}int* preorderTraversal(struct TreeNode* root, int* returnSize){       int *res=malloc(sizeof(int)*3000);    *returnSize=0;    preorder(root,res,returnSize);    return res;}

2。如何较为直观地打印二叉树

题目:
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如:

给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7

返回:

[3,9,20,15,7]

思路:

二叉树的一个层序遍历,但是要将遍历的结果放在一个malloc申请的数组中

代码

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     struct TreeNode *left; *     struct TreeNode *right; * }; *//** * Note: The returned array must be malloced, assume caller calls free(). */int* levelOrder(struct TreeNode* root, int* returnSize){       //初始化    int i=0;//用来记队列的大小    int front=-1;//用来表示队列的位置    int rear=-1;    struct TreeNode *Queue[1100];//创建队列大小    struct TreeNode*p;//建立工作指针    int* arr=(int*)malloc(sizeof(int)*1150);    if(root==NULL){   //当二叉树为空        (*returnSize)=0;        return 0;    }else{   //当二叉树不为空        Queue[++rear]=root;//根节点先入队列        while(front
val; if(p->left){ Queue[++rear]=p->left; } if(p->right){ Queue[++rear]=p->right; } } } *returnSize=i; return arr;}
上一篇:leetcode关于微信读书的笔记-递归和动态规划问题
下一篇:leetcode关于微信读书的笔记-shell命令

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年03月23日 09时34分43秒