博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode - Binary Tree Level Order Traversal i ii
阅读量:4919 次
发布时间:2019-06-11

本文共 3163 字,大约阅读时间需要 10 分钟。

题目:Binary Tree Level Order Traversal i ii

i和ii的差别仅在于最后将结果逆序一下就行了,算法上基本相同

 

个人思路:

1、二叉树的层次遍历,我们一层一层地处理,用一个队列(A队列)将每一层的所有节点按照从左到右的顺序入队

2、待该队列的所有节点都出队,并且用另外一个队列(B队列)接收出队的节点(为下一层节点的处理做准备),则考虑处理下一层节点

3、将B队列的节点逐个出队,考察节点的左孩子和右孩子,若存在则将孩子节点入A队列,如此循环地处理每一层节点,直到A队列为空结束

 

代码(注释中的代码为i的解):

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 struct TreeNode 10 { 11 int val; 12 TreeNode *left; 13 TreeNode *right; 14 TreeNode(int x) : val(x), left(NULL), right(NULL) {} 15 }; 16 17 class Solution 18 { 19 public: 20 vector
> levelOrder(TreeNode *root) 21 { 22 /* 23 vector
> total_result; 24 vector
level_result; 25 queue
current_level; 26 queue
current_level_bak; 27 28 if (root == NULL) 29 { 30 return total_result; 31 } 32 33 current_level.push(root); 34 35 while (!current_level.empty()) 36 { 37 TreeNode *current_node = current_level.front(); 38 current_level.pop(); 39 current_level_bak.push(current_node); 40 level_result.push_back(current_node->val); 41 42 if (current_level.empty()) 43 { 44 total_result.push_back(level_result); 45 level_result.clear(); 46 while (!current_level_bak.empty()) 47 { 48 current_node = current_level_bak.front(); 49 current_level_bak.pop(); 50 if (current_node->left != NULL) 51 { 52 current_level.push(current_node->left); 53 } 54 if (current_node->right != NULL) 55 { 56 current_level.push(current_node->right); 57 } 58 } 59 } 60 } 61 62 return total_result; 63 */ 64 65 vector
> total_result; 66 deque
> temp_result; 67 vector
level_result; 68 queue
current_level; 69 queue
current_level_bak; 70 71 if (root == NULL) 72 { 73 return total_result; 74 } 75 76 current_level.push(root); 77 78 while (!current_level.empty()) 79 { 80 TreeNode *current_node = current_level.front(); 81 current_level.pop(); 82 current_level_bak.push(current_node); 83 level_result.push_back(current_node->val); 84 85 if (current_level.empty()) 86 { 87 temp_result.push_front(level_result); 88 level_result.clear(); 89 while (!current_level_bak.empty()) 90 { 91 current_node = current_level_bak.front(); 92 current_level_bak.pop(); 93 if (current_node->left != NULL) 94 { 95 current_level.push(current_node->left); 96 } 97 if (current_node->right != NULL) 98 { 99 current_level.push(current_node->right);100 }101 }102 }103 }104 105 while (!temp_result.empty())106 {107 total_result.push_back(temp_result.front());108 temp_result.pop_front();109 }110 111 return total_result;112 }113 };114 115 int main()116 {117 TreeNode *root = new TreeNode(3);118 root->left = new TreeNode(9);119 root->right = new TreeNode(20);120 root->right->left = new TreeNode(15);121 root->right->right = new TreeNode(7);122 123 Solution s;124 vector
> result = s.levelOrder(root);125 126 for (int i = 0; i < result.size(); ++i)127 {128 vector
level = result[i];129 for (int j = 0; j < level.size(); ++j)130 {131 cout << level[j] << ",";132 }133 cout << endl;134 }135 136 system("pause");137 138 return 0;139 }
View Code

 

网上的思路也大致是这样

转载于:https://www.cnblogs.com/laihaiteng/p/3797748.html

你可能感兴趣的文章
【IE6的疯狂之二】IE6中PNG Alpha透明(全集)
查看>>
第一个Shell脚本
查看>>
C++ 小笔记
查看>>
Mysql 语句优化
查看>>
例子:进度条
查看>>
包含单引号的sql
查看>>
HTML 基础 2
查看>>
Java 最常见 200+ 面试题全解析:面试必备(转载)
查看>>
LinkedList
查看>>
Spring框架下PropertyPlaceholderConfigurer类配置roperties文件
查看>>
SQL查询优化
查看>>
使用子查询
查看>>
SD卡调试关键点
查看>>
Hadoop HBase Phoenix 版本
查看>>
深入Java集合学习系列:ConcurrentHashSet简单实现
查看>>
[原创]独立模式安装Hive
查看>>
Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1
查看>>
LeetCode My Solution: Minimum Depth of Binary Tree
查看>>
Objective-C中的Category(分类)
查看>>
浅谈python可迭代对象,迭代器
查看>>