leetcode解题之102&107. Binary Tree Level Order Traversal java版(二叉树层次遍历)
来源:互联网 发布:centos7 yum安装wget 编辑:程序博客网 时间:2024/05/29 13:55
102. Binary Tree Level Order Traversal
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 7
return its level order traversal as:
[ [3], [9,20], [15,7]]
层次遍历二叉树,就是首先访问二叉树的第一层元素,再访问第二层,接着访问第三层,以此类推。实现的方式是,用一个先进先出的队列作为辅助数据数据结构,
维护一个当前结点数目,和下一层结点数目,当前层遍历层,加入结果集
public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> ret = new ArrayList<>();if (root == null)return ret;levelOrderCore(root, ret);return ret;}public void levelOrderCore(TreeNode root, List<List<Integer>> ret) {// 用来标记下一行有多少元素int nextCount = 0;// 当前层有多少结点,为1 是根节点初始化int curCount = 1;Queue<TreeNode> q = new LinkedList<>();q.offer(root);List<Integer> tmp = new ArrayList<>();while (!q.isEmpty()) {TreeNode node = q.poll();tmp.add(node.val);// 遍历结点当前个数减去1curCount--;if (node.left != null) {q.offer(node.left);// 左右孩子属于下一层结点nextCount++;}if (node.right != null) {q.offer(node.right);nextCount++;}// 如果当前层遍历完,加入结果集合if (curCount == 0) {curCount = nextCount;nextCount = 0;ret.add(new ArrayList<>(tmp));tmp.clear();}}}
107. Binary Tree Level Order Traversal II
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3]]倒序输入,可以加入结点,最后翻转,或者每次加入链表头部,建议使用双向链表,插入速度快。
public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> ret = new LinkedList<>();if (root == null)return ret;// 直接插入在头部,或者最后翻转链表levelOrderCore(root, ret);return ret;}//时间复杂度:O(n)//空间复杂度:O(n)public void levelOrderCore(TreeNode root, List<List<Integer>> ret) {int nextCount = 0;int curCount = 1;// 队列,层次遍历Queue<TreeNode> q = new LinkedList<>();q.offer(root);List<Integer> tmp = new LinkedList<>();while (!q.isEmpty()) {TreeNode node = q.poll();tmp.add(node.val);curCount--;if (node.left != null) {q.offer(node.left);nextCount++;}if (node.right != null) {q.offer(node.right);nextCount++;}if (curCount == 0) {curCount = nextCount;nextCount = 0;// 把结点添加到头部,使用双向链表LinkedListret.add(0, new LinkedList<>(tmp));tmp.clear();}}}
1 0
- leetcode解题之102&107. Binary Tree Level Order Traversal java版(二叉树层次遍历)
- leetCode解题报告之Binary Tree Level Order Traversal II,I(二叉树层次遍历)
- Leetcode 107. Binary Tree Level Order Traversal II 二叉树层次遍历2 解题报告
- LeetCode OJ 之 Binary Tree Level Order Traversal (二叉树的层次遍历)
- LeetCode OJ 之 Binary Tree Level Order Traversal II (二叉树的层次遍历-二)
- LeetCode OJ 之 Binary Tree Zigzag Level Order Traversal (二叉树的曲线层次遍历)
- LeetCode 102 Binary Tree Level Order Traversal(二叉树的层次遍历)
- 107.LeetCode Binary Tree Level Order Traversal II(easy)[二叉树层次遍历 广度搜索 队列]
- Leetcode#107. Binary Tree Level Order Traversal II (queue二叉树层次遍历)
- (二叉树z字形层次遍历)LeetCode#103. Binary Tree Zigzag Level Order Traversal
- leetcode解题之103. Binary Tree Zigzag Level Order Traversal java版(之字形打印二叉树)
- 【二叉树层次遍历】Binary Tree Level Order Traversal
- 107. Binary Tree Level Order Traversal II (二叉树由底向上层次遍历)
- leetcode---binary-tree-level-order-traversal-ii---树层次遍历
- LeetCode(Binary Tree Level Order Traversal, 2,Zigzag)二叉树的层次遍历
- leetcode 二叉树层次遍历输出Binary Tree Level Order Traversal
- [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)
- 102.LeetCode Binary Tree Level Order Traversal(easy)[二叉树层次遍历 广度搜索 队列]
- 【考试总结】[CQOI2017]考试总结
- python 基础教程 23章NNTP 1
- django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applie
- jenkins权威指南学习---第一章---jenkins介绍
- 解题报告:武大第十五届校赛网络赛 H.Werewolf 树型DP
- leetcode解题之102&107. Binary Tree Level Order Traversal java版(二叉树层次遍历)
- Struts2 Web 资源获取的4种方式
- Angular中实现文字的渐变效果
- PAT-A-1062. Talent and Virtue (25)
- Ueditor在.net配置遇到config、hander等未定义的解决方法
- 初探进程及task_struct
- python 基础教程 23章NNTP 2
- Mac系统如何显示.开头的文件夹或者隐藏的文件夹
- leetcode 557 Reverse Words in a String III C++