5.1.4—二叉树的遍历—Binary Tree Level Order Traversal

来源:互联网 发布:浪潮软件重大新闻 编辑:程序博客网 时间:2024/05/16 20:21
描述
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from le to right, level by
level).
For example: Given binary tree {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]

#include "BinaryTree.h"#include <stack>#include<queue>#include<vector>using namespace std;//===二叉树的层次遍历vector<vector<int>> LevelTraversal(BinaryTreeNode *proot){queue<BinaryTreeNode*>temp;vector<int> tempres;//记录所有数字vector<int> num;//记录每一层的个数temp.push(proot);int Initial = 1;num.push_back(Initial);while (!temp.empty()){int cnt = 0;for (int i = 0; i < Initial; i++){BinaryTreeNode *p = temp.front();tempres.push_back(p->m_nValue);temp.pop();if (p->m_pLeft){temp.push(p->m_pLeft);cnt++;}if (p->m_pRight){temp.push(p->m_pRight);cnt++;}}Initial = cnt;if (Initial!=0)num.push_back(Initial);}//====================vector<vector<int>> res;int cnt = 0;for (int i = 0; i < num.size();i++){vector<int> cahe;for (int j =cnt; j < cnt+num[i]; j++)cahe.push_back(tempres[j]);cnt += num[i];res.push_back(cahe);}return res;}// ====================测试代码====================//            8//        6      10//       5 7    9  11int main(){BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8);BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6);BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10);BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7);BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9);BinaryTreeNode* pNode11 = CreateBinaryTreeNode(11);ConnectTreeNodes(pNode8, pNode6, pNode10);ConnectTreeNodes(pNode6, pNode5, pNode7);ConnectTreeNodes(pNode10, pNode9, pNode11);//===//PrintTree(pNode8);//===vector<vector<int>> res = LevelTraversal(pNode8);for (int i = 0; i < res.size(); i++){for (int j = 0; j < res[i].size(); j++)cout << res[i][j] << " ";cout << endl;}DestroyTree(pNode8);}



阅读全文
0 0
原创粉丝点击