输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
题目:
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ \
6 10
/ \ / \
5 7 9 11
输出8 6 10 5 7 9 11
解法:
我们利用队列来解决这个问题。
对列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
首先让根节点入队,作为队首,如果队首为NULL,则结束,如果不为空,弹出队首,输出队首元素,并将队首左右子孩子树压入队中,再然后,左子树为root,输出元素,压入左右子孩子树,然后是右子树..... 直到空为止。
首先我们定义头结点
struct TreeNode { int data; TreeNode*left; TreeNode*right; };
建树
void BuildTree(TreeNode*&Node,int n) { if(Node==NULL) { TreeNode*newNode=new TreeNode(); newNode->data=n; newNode->left=NULL; newNode->right=NULL; Node=newNode; }else if(Node->data<n) { BuildTree(Node->right,n); } else { BuildTree(Node->left,n); } }
队输出
void OutPut() { if(P.front()==NULL) return; TreeNode*Node=P.front(); cout<<P.front()->data<<" ";//输出根元素 P.push(P.front()->left);//压入左右子树 P.push(P.front()->right); P.pop();//出队先进先出左子树先出,输出元素后,它的左右子树又入队 OutPut(); }
完整:
#include<iostream> #include<queue> #include<string> using namespace std; struct TreeNode { int data; TreeNode*left; TreeNode*right; }; queue<TreeNode*>P; void BuildTree(TreeNode*&Node,int n) { if(Node==NULL) { TreeNode*newNode=new TreeNode(); newNode->data=n; newNode->left=NULL; newNode->right=NULL; Node=newNode; }else if(Node->data<n) { BuildTree(Node->right,n); } else { BuildTree(Node->left,n); } } void OutPut() { if(P.front()==NULL) return; TreeNode*Node=P.front(); cout<<P.front()->data<<" ";//输出根元素 P.push(P.front()->left);//压入左右子树 P.push(P.front()->right); P.pop();//出队先进先出左子树先出,输出元素后,它的左右子树又入队 OutPut(); } int main() { TreeNode*Node=NULL; BuildTree(Node,8); BuildTree(Node,6); BuildTree(Node,10); BuildTree(Node,5); BuildTree(Node,7); BuildTree(Node,9); BuildTree(Node,11); P.push(Node); OutPut(); system("pause"); }
谢谢。
题目(微软):
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ \
6 10
/ \ / \
5 7 9 11
输出8 6 10 5 7 9 11。
作者: 天才小喵
链接:http://www.imooc.com/article/4313
来源:慕课网
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ \
6 10
/ \ / \
5 7 9 11
输出8 6 10 5 7 9 11。
作者: 天才小喵
链接:http://www.imooc.com/article/4313
来源:慕课网

浙公网安备 33010602011771号