学软件工程好找工作吗郑州官网网站推广优化公司
二叉树的层序遍历
思路
使用队列来实现对二叉树的节点访问,类似于广度优先遍历。
具体代码
CPP
下面代码的访问顺序只是存在一个数组中,并没有按层访问,
如果要添加每层的顺序那么就是每层里加上vector<int> temp
就可以了。
class Solution{
public:vector<int> traversal(TreeNode *root){queue<TreeNode*> que;if(!root)return res;que.push(root);while(!que.empty()){// 控制当前递归的个数int size = que.size();while(size--){TreeNode* cur = que.front();que.pop();if(cur->left)que.push(cur->left);if(cur->right)que.push(cur->right);res.push_back(cur->val);}}return res;}
private :vector<int> res;
}
Java
- 定义一个队列存储每层的元素;
- 对每层元素:先记录该层元素的个数,然后从左到右依次遍历,并将访问的结果压栈;
- 每访问一个节点,查找是否有左右孩子。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {private Queue<TreeNode> q = new ArrayDeque<>();List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> levelOrder(TreeNode root) {if (root == null) {return res;}q.add(root);while (!q.isEmpty()) {List<Integer> temp = new ArrayList<>();int size = q.size();while (size > 0) {TreeNode cur = q.remove();if (cur.left != null) {q.add(cur.left);}if (cur.right != null) {q.add(cur.right);}size--;temp.add(cur.val);}res.add(temp);}return res;}
}