层次遍历 二叉树
来源:互联网 发布:javascript实例300下载 编辑:程序博客网 时间:2024/05/16 00:29
对于二叉树的层次遍历,本人实现了递归版本与非递归的版本。
要求对于给定的二叉树, 输出的结果为[ [ 1 ] , [ 2 , 3 ] , [4 , 5 ] ]
注意:只需要将各个层之间的界限确定清楚就好了。
迭代版本:(使用队列,利用空指针作为层与层之间分隔的标记)。
vector<vector<int> > levelOrder(TreeNode *root) { queue<TreeNode *> q; TreeNode *temp = root; vector<vector<int> > vecs; if(root==NULL)return vecs; vector<int> vec; q.push(temp); q.push(NULL); TreeNode *prev = NULL; while(!q.empty()) { temp = q.front(); q.pop(); if(temp == NULL && prev == NULL) break; if(temp == NULL) { vecs.push_back(vec); vec.clear(); q.push(NULL); prev = temp; continue; } vec.push_back(temp->val); if(temp->left)q.push(temp->left); if(temp->right)q.push(temp->right); prev = temp; } return vecs; }
递归版本:
void traverse(TreeNode *root, int level, vector<vector<int> > & vecs) { if(root == NULL)return; if(level > vecs.size())vecs.push_back(vector<int>()); vecs[level-1].push_back(root->val); traverse(root->left, level+1, vecs); traverse(root->right, level+1, vecs); } vector<vector<int> > levelOrder(TreeNode *root) { vector<vector<int> > vecs; traverse(root, 1, vecs); return vecs; }
上述还可使用两个队列,分别用来存储前一层和后一层的树中的节点。代码如下:
vector<vector<int> > levelOrder(TreeNode *root) { queue<TreeNode *> queue1; queue<TreeNode *> queue2; vector<vector<int> > allLevels; vector<int> level; if(root == NULL) return allLevels; queue1.push(root); while(!queue1.empty()) { TreeNode *temp = queue1.front(); queue1.pop(); if(temp->left)queue2.push(temp->left); if(temp->right)queue2.push(temp->right); level.push_back(temp->val); if(queue1.empty()) { swap(queue1,queue2); allLevels.push_back(level); level.clear(); } } return allLevels; }
变式:要求将数组从叶子节点开始输出,只需要在上述程序中加上 reverse() 函数即可。
0 0
- 层次遍历二叉树
- 层次遍历二叉树
- 二叉树层次遍历
- 二叉树 层次遍历
- 二叉树层次遍历
- 层次遍历二叉树
- 二叉树层次遍历
- 层次遍历二叉树
- 二叉树层次遍历
- 二叉树层次遍历
- 层次遍历二叉树
- 二叉树层次遍历
- 二叉树层次遍历
- 层次遍历 二叉树
- 层次遍历二叉树
- 层次遍历二叉树
- 层次遍历二叉树
- 层次遍历二叉树
- HTML5新功能
- 寒假学习 第18、19天 (linux 高级编程)
- 九度OJ 1435 迷瘴
- SQL Agent Services Run SSIS包
- 2014年新的一年,新的起点。。。
- 层次遍历 二叉树
- 泛型unity
- ECC关键算法实现
- 记个操作
- EBS OAF开发中日志(Logging)
- Java定时关机程序(Calendar,Timer)
- Windows 7如何知道用户网络受限
- java入门小程序
- unity实现依赖注入