算法习题16:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
来源:互联网 发布:webpack打包php 编辑:程序博客网 时间:2024/05/08 15:58
题目(微软):
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ \
6 10
/ \ / \
5 7 9 11
输出8 6 10 5 7 9 11。
-----------------------------------
仍然是二叉树,那就是遍历问题了,好了,这里遍历似乎不是我们以往的遍历方式,如果按照那些先序 中序 后序发现是以深度优先的遍历方式,而这里更希望的是以宽度打印,当然这里就需要借助一个存储机制,当然又是链表,在想想,链表先加入 的元素应该是层数较上的,应该被打印出,然后在把它的下层加入,以此类推
终于,这道题又写了一个好久没有写的数据结构---队列!!
好了,看到这里大家应该可以得到答案了。
下面给出本题答案,同时还是练习了下中序打印,虽然确实很简单。。。
希望大家能自己写个队列,练习算法的时候还是尽量少用库里的Queue
//============================================================================// Name : PrintBT.cpp// Author : YLF// Version :// Copyright : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include <iostream>using namespace std;/* * 二叉树的节点 */struct Node{int value;Node* left;Node* right;};/* * 队列节点 */struct QueueNode{Node* node;QueueNode* next;};void addNode(Node* &p, int value);void printBT(Node* p);void printBTByFloor();QueueNode* containerHead = NULL;QueueNode* containerCur = NULL;int main() {Node* head = NULL;int input = 0;while(true){cin>>input;if(input != -1)addNode(head, input);elsebreak;}printBT(head);cout<<endl;//同层打印if(head){containerHead = new QueueNode();containerHead->next = NULL;containerHead->node = head;containerCur = containerHead;}printBTByFloor();return 0;}void addNode(Node* &p, int value){if(p == NULL){Node* temp = new Node();temp->value = value;temp->left = NULL;temp->right = NULL;p = temp;}else{if(value < p->value)addNode(p->left, value);elseaddNode(p->right, value);}}/* * 按照每层顺序打印 */void printBTByFloor(){if(containerHead == NULL)return;cout<<containerHead->node->value<<" ";if(containerHead->node->left){QueueNode* l = new QueueNode();l->node = containerHead->node->left;l->next = NULL;containerCur->next = l;containerCur = l;}if(containerHead->node->right){QueueNode* r = new QueueNode();r->node = containerHead->node->right;r->next = NULL;containerCur->next = r;containerCur = r;}QueueNode* temp = containerHead;containerHead = containerHead->next;delete temp;printBTByFloor();}/* * 中序打印 */void printBT(Node* p){if(p == NULL)return;printBT(p->left);cout<<p->value<<" ";printBT(p->right);}
- 算法习题16:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- 【算法】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- 微软算法100道题-----输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印(16)
- 16题:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
- 16 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
- 【练习】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
- Np16、输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
- 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
- 14. 微软面试题:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
- 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- 每天学习一算法系列(16)(输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印)
- 第16 题:题目(微软):输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
- 微软100题第16题(输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印)
- Poj 3372 Candy Distribution
- java中字节流和字符流
- “思维问题”——“菱形”
- 线程--条件变量Condition Variable
- poj 3233 Matrix Power Series
- 算法习题16:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
- c++ 位域[转]
- Eclipse程序员快捷键
- Interface成员的默认修饰
- 针对WIN7系统装上驱动后,设备管理器里的设备有黄色的感叹号的问题(转)
- 自定义tableview,数据不完整问题
- java 中对象的内存模型
- Configuring Flex Links
- 一致性 HASH 整理