LeetCode102 Binary Tree Level Order Traversal
来源:互联网 发布:西文数据库 编辑:程序博客网 时间:2024/06/05 20:49
详细见:leetcode.com/problems/binary-tree-level-order-traversal
Java Solution: github
package leetcode;/* * Given a binary tree, return the level order traversal of its nodes' values. * (ie, from left to right, level by level).For example:Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7return its level order traversal as:[ [3], [9,20], [15,7]] */import java.util.LinkedList;import java.util.List;import java.util.Queue;import tools.TreeNode辅助.TreeNode;public class P102_BinaryTreeLevelOrderTraversal {static int N = Integer.MIN_VALUE;public static void main(String[] args) {TreeNode root = null;root = tools.TreeNode辅助.A_生成满二叉树(new int[] {//1,//2, 2,//3, 4, 4, 3,//5, 6, 7, 8, 8, 7, 6, 51,2, 2,//3, 4, 4, 3,//5, 6, 7, 8, 8, N, 6, 5});Solution s = new Solution();System.out.println(s.levelOrder(root));}/* * AC * 3 ms */static class Solution {List<List<Integer>> ans = new LinkedList<>(); public List<List<Integer>> levelOrder(TreeNode root) {if (root == null) {return ans;}Queue<TreeNode> q = new LinkedList<TreeNode>();Queue<Integer> q_int = new LinkedList<Integer>();q.add(root);q_int.add(1);int pre_int = -1;List<Integer> this_list = null;while (! q.isEmpty()) {TreeNode root_now = q.poll();int q_now = q_int.poll();if (q_now != pre_int) {if (pre_int != -1) {ans.add(this_list);}this_list = new LinkedList<>();pre_int = q_now;}this_list.add(root_now.val);if (root_now.left != null) {q.add(root_now.left);q_int.add(q_now + 1);}if (root_now.right != null) {q.add(root_now.right);q_int.add(q_now + 1);}}if (this_list != null) {ans.add(this_list);} return ans; }}}
C Solution: github
/* url: leetcode.com/problems/binary-tree-level-order-traversal AC 3ms 45.59%*/#include <stdio.h>#include <stdlib.h>struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;};typedef struct TreeNode * ptn;typedef struct TreeNode stn;typedef int* T;typedef struct al sal;typedef struct al * pal;struct al { int capacity; int size; T* arr;};pal al_init(int capacity) { pal l = (pal) malloc(sizeof(sal)); if (capacity < 1) return NULL; l->arr = (T*) malloc(sizeof(T) * capacity); l->capacity = capacity; l->size = 0; return l;}void al_expand_capacity(pal l) { T* new_arr = (T*) malloc(sizeof(T) * (l->capacity * 2 + 1)); int i = 0; for (i = 0; i < l->capacity; i ++) new_arr[i] = l->arr[i]; free(l->arr); l->arr = new_arr; l->capacity = l->capacity * 2 + 1;}void al_add_last(pal l, T v) { if (l->capacity == l->size) al_expand_capacity(l); l->arr[l->size] = v; l->size ++;}void al_free_all(pal l) { int i = 0; for (i = 0; i < l->size; i ++) free(l->arr[i]); free(l->arr); free(l);}T* al_convert_to_array_free_l(pal l) { T* arr = l->arr; free(l); return arr;}typedef ptn V;typedef struct sl ssl;typedef struct sl * psl;struct sl { int capacity; int size; V* arr;};psl sl_init(int capacity) { psl l = (psl) malloc(sizeof(ssl)); if (capacity < 1) return NULL; l->arr = (V*) malloc(sizeof(V) * capacity); l->capacity = capacity; l->size = 0; return l;}void sl_expand_capacity(psl l) { V* new_arr = (V*) malloc(sizeof(V) * (l->capacity * 2 + 1)); int i = 0; for (i = 0; i < l->capacity; i ++) new_arr[i] = l->arr[i]; free(l->arr); l->arr = new_arr; l->capacity = l->capacity * 2 + 1;}void sl_add_last(psl l, V v) { if (l->capacity == l->size) sl_expand_capacity(l); l->arr[l->size] = v; l->size ++;}void sl_free_all(psl l) { free(l->arr); free(l);}void swap_psl(psl* l1, psl* l2) { psl l = *l1; *l1 = *l2; *l2 = l;}int** levelOrder(ptn n, int** cn, int* rn) { psl l1 , l2 ; int i = 0, i2 = 0, *t = NULL; pal l = NULL, ln = NULL; if (n == NULL) return NULL; l1 = sl_init(16); l2 = sl_init(16); l = al_init(16); ln = al_init(16); sl_add_last(l1, n); while (l1->size != 0) { t = (int*) malloc(sizeof(int) * l1->size); for (i = 0; i < l1->size; i ++) t[i] = l1->arr[i]->val; al_add_last(l, t); t = (int*) malloc(sizeof(int) * 1); t[0] = l1->size; al_add_last(ln, t); l2->size = 0; for (i = 0; i < l1->size; i ++) { if (l1->arr[i]->left != NULL) sl_add_last(l2, l1->arr[i]->left); if (l1->arr[i]->right != NULL) sl_add_last(l2, l1->arr[i]->right); } swap_psl(&l1, &l2); } sl_free_all(l1); sl_free_all(l2); *cn = (int*) malloc(sizeof(int) * ln->size); for (i = 0; i < ln->size; i ++) (*cn)[i] = ln->arr[i][0]; al_free_all(ln); *rn = l->size; return al_convert_to_array_free_l(l);}
Python Solution: github
#coding=utf-8''' url: leetcode.com/problems/binary-tree-level-order-traversal @author: zxwtry @email: zxwtry@qq.com @date: 2017年4月26日 @details: Solution: 49ms 88.74%'''class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution(object): def levelOrder(self, n): """ :type n: TreeNode :rtype: List[List[int]] """ if n == None: return [] ans, l = [], [n] while len(l) != 0: ans.append([nn.val for nn in l]) ll = [] for nn in l: if nn.left != None: ll.append(nn.left) if nn.right != None: ll.append(nn.right) l = ll return ans
0 0
- LeetCode102-Binary-Tree-Level-Order-Traversal
- LeetCode102—Binary Tree Level Order Traversal
- LeetCode102 Binary Tree Level Order Traversal Java
- leetcode102:Binary Tree Level Order Traversal
- LeetCode102: Binary Tree Level Order Traversal
- leetcode102. Binary Tree Level Order Traversal
- LeetCode102 Binary Tree Level Order Traversal
- leetcode102. Binary Tree Level Order Traversal & 103. Zigzag Level
- LeetCode102——Binary Tree Level Order Traversal
- LeetCode102 Binary Tree Level Order Traversal Java题解
- Leetcode102——Binary Tree Level Order Traversal
- 算法作业HW18:LeetCode102 Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- LeetCode101 Symmetric Tree
- I NEED A OFFER!(dp).HDU
- CountDownTimer的使用
- 请求转发和重定向
- ADO.NET 快速入门(六):读写 XML
- LeetCode102 Binary Tree Level Order Traversal
- java面向对象三大特性--继承
- C++,关于指针形参”值传递VS地址传递“的问题
- OpenCV2.4.9在64位Win7+VS2012下的配置过程
- 扑克牌问题之排序
- 第二本书unit9 vsftpd服务
- 前端学习资源收集
- ADO.NET 快速入门(七):使用数据库事务
- 阿里笔试-逆波兰表达式