从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
思路:
此题本质上就是二叉树的层序遍历,把遍历的结果放在一个malloc出来的数组里。
层序遍历不像先,中,后序遍历可以利用栈的数据结构,可以递归求解。
层序遍历可以l利用队列求解。
实现:
- 创建二叉树节点指针数组
- 先将根节点push队列
- 从左到右将孩子节点push入队列(如果有)
- 遍历完的节点要出队
typedef struct TreeNode Tnode;
int* levelOrder(struct TreeNode* root, int* returnSize){
if(!root)
{
*returnSize=0;
return NULL;
}
Tnode* Queue[1000]; //创建队列
int front = -1,rear = -1; //队头,队尾
Tnode* p;//工作指针
int* retArr = (int*)malloc(sizeof(int) * 1000);
int i = 0;
Queue[++rear] = root;
while(front < rear)
{
p = Queue[++front]; //出队
retArr[i++] = p->val;
if(p->left)
Queue[++rear] = p->left;
if(p->right)
Queue[++rear] = p->right;
}
*returnSize = i;
return retArr;
}