题目链接:点击打开链接
题目大意:略
解题思路:略
相关企业
- 字节跳动
AC 代码
- Java
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ // 解决方案(1) class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); Stack<Integer> stack = new Stack<>(); if(root != null) queue.add(root); boolean reverse = false; while(!queue.isEmpty()) { List<Integer> tmp = new ArrayList<>(); for(int i = queue.size(); i > 0; i--) { TreeNode node = queue.poll(); if (reverse) { stack.push(node.val); } else { tmp.add(node.val); } if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } if (reverse) { while (!stack.isEmpty()) { tmp.add(stack.pop()); } } reverse = !reverse; res.add(tmp); } return res; } } // 解决方案(2) class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); if(root != null) queue.add(root); while(!queue.isEmpty()) { LinkedList<Integer> tmp = new LinkedList<>(); for(int i = queue.size(); i > 0; i--) { TreeNode node = queue.poll(); if(res.size() % 2 == 0) tmp.addLast(node.val); else tmp.addFirst(node.val); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } res.add(tmp); } return res; } } // 解决方案(3) class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Deque<TreeNode> deque = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); if(root != null) deque.add(root); while(!deque.isEmpty()) { // 打印奇数层 List<Integer> tmp = new ArrayList<>(); for(int i = deque.size(); i > 0; i--) { // 从左向右打印 TreeNode node = deque.removeFirst(); tmp.add(node.val); // 先左后右加入下层节点 if(node.left != null) deque.addLast(node.left); if(node.right != null) deque.addLast(node.right); } res.add(tmp); if(deque.isEmpty()) break; // 若为空则提前跳出 // 打印偶数层 tmp = new ArrayList<>(); for(int i = deque.size(); i > 0; i--) { // 从右向左打印 TreeNode node = deque.removeLast(); tmp.add(node.val); // 先右后左加入下层节点 if(node.right != null) deque.addFirst(node.right); if(node.left != null) deque.addFirst(node.left); } res.add(tmp); } return res; } } // 解决方案(4) class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); if(root != null) queue.add(root); while(!queue.isEmpty()) { List<Integer> tmp = new ArrayList<>(); for(int i = queue.size(); i > 0; i--) { TreeNode node = queue.poll(); tmp.add(node.val); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } if(res.size() % 2 == 1) Collections.reverse(tmp); res.add(tmp); } return res; } }
- C++
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ // 解决方案(1) class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { deque<TreeNode*> deque; vector<vector<int>> res; if(root != NULL) deque.push_back(root); while(!deque.empty()) { // 打印奇数层 vector<int> tmp; for(int i = deque.size(); i > 0; i--) { // 从左向右打印 TreeNode* node = deque.front(); deque.pop_front(); tmp.push_back(node->val); // 先左后右加入下层节点 if(node->left != NULL) deque.push_back(node->left); if(node->right != NULL) deque.push_back(node->right); } res.push_back(tmp); if(deque.empty()) break; // 若为空则提前跳出 // 打印偶数层 tmp.clear(); for(int i = deque.size(); i > 0; i--) { // 从右向左打印 TreeNode* node = deque.back(); deque.pop_back(); tmp.push_back(node->val); // 先右后左加入下层节点 if(node->right != NULL) deque.push_front(node->right); if(node->left != NULL) deque.push_front(node->left); } res.push_back(tmp); } return res; } }; // 解决方案(2) class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> que; vector<vector<int>> res; if(root != NULL) que.push(root); while(!que.empty()) { vector<int> tmp; for(int i = que.size(); i > 0; i--) { TreeNode* node = que.front(); que.pop(); tmp.push_back(node->val); if(node->left != NULL) que.push(node->left); if(node->right != NULL) que.push(node->right); } if(res.size() % 2 == 1) reverse(tmp.begin(),tmp.end()); res.push_back(tmp); } return res; } };