17-- 从上到下打印二叉树,按层打印。
// // main.cpp // subStructureInTree // // Created by Hugo Cao on 15/7/10. // Copyright (c) 2015年 Hugo Cao . All rights reserved. // /* 问题描述: 从上到下打印二叉树,按层打印。 思路:这里用队列实现了转化。很有意思的想法。 */ #include <iostream> #include <deque> using namespace std; #define Data int typedef struct binaaryTreeNode { Data m_value; binaaryTreeNode *m_pleft; binaaryTreeNode *m_pright; }btNode, *binTree; binTree addNode(Data value) { binTree bt = NULL; bt = new btNode; if (bt == NULL) { cout << "申请地址错误" << endl; return NULL; } bt->m_value = value; bt->m_pleft = NULL; bt->m_pright = NULL; return bt; } bool connectTreeNode(binTree parrentNode, binTree leftSonNode = NULL, binTree rightSonNode = NULL) { if (parrentNode == NULL || (leftSonNode == NULL && rightSonNode == NULL)) { cout << "结点输入问题" << endl; return false; } parrentNode->m_pleft = leftSonNode; parrentNode->m_pright = rightSonNode; return true; } binTree createBinaryATree(binTree Ahead) { binTree p1 = addNode(8); binTree p2 = addNode(8); binTree p3 = addNode(7); binTree p4 = addNode(9); binTree p5 = addNode(2); binTree p6 = addNode(4); binTree p7 = addNode(7); connectTreeNode(p1, p2, p3); connectTreeNode(p2, p4, p5); connectTreeNode(p5, p6, p7); return (Ahead = p1); } //按层打印 void PrintFromTopToButtom(binTree bt) { //如果是空结点就退出 if (!bt) { return ; } //使用队列作为模型 deque<binTree> dequeTreeNode; dequeTreeNode.push_back(bt); //将根结点压入队列 //栈为空的时候退出循环 while (dequeTreeNode.size()) { //返回队列头指针 binTree pNode = dequeTreeNode.front(); printf("%d\n", pNode->m_value); //打印向量信息 dequeTreeNode.pop_front(); //弹出 //层遍历,其实也是先左后右,向队列压入元素。 if (pNode->m_pleft) { dequeTreeNode.push_back(pNode->m_pleft); } if (pNode->m_pright) { dequeTreeNode.push_back(pNode->m_pright); } } } //打印二叉树 void BLR_print_BinaryTree(binTree bt) { if (bt == NULL) return ; cout << bt->m_value << " " << endl; BLR_print_BinaryTree(bt->m_pleft); BLR_print_BinaryTree(bt->m_pright); } int main() { binTree bt_A = NULL; bt_A = createBinaryATree(bt_A); PrintFromTopToButtom(bt_A); cout << endl; return 0; }