- 浏览: 183492 次
- 性别:
- 来自: 济南
文章分类
最新评论
这篇文章列出了leetcode中有关二叉树遍历的题目,之前在二叉树的深搜和广搜中介绍过,这里再重复一下,因为这都是最基本的操作,需要我们熟练掌握。
1,Binary Tree Level Order Traversal
二叉树的广度优先搜索,输出所有节点的值,说的广搜,我们一律用队列来完成,代码如下:
2,Binary Tree Level Order Traversal II
给定二叉树:{3,9,20,#,#,15,7},
输出:[[15,7], [9,20], [3]]
这是第一题的变形,仅仅把结果逆序输出,我们用链表中的addFirst()方法就解决了。
下面是二叉树的前序遍历,中序遍历,后序遍历,都属于深搜,我们用堆栈来完成。
3,Binary Tree Inorder Traversal
二叉树的中序遍历,输出所有节点的值。
代码如下:
4,Binary Tree Preorder Traversal
二叉树的前序遍历,输出所有节点的值。
5,Binary Tree Postorder Traversal
二叉树的后序遍历,输出所有节点的值。
1,Binary Tree Level Order Traversal
二叉树的广度优先搜索,输出所有节点的值,说的广搜,我们一律用队列来完成,代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> llist = new ArrayList<List<Integer>>(); List<Integer> list = new ArrayList<Integer>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); int count = 0; int helper = 1; if(root == null) return llist; queue.offer(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); if(helper > 0){ list.add(node.val); helper --; } if(node.left != null) { queue.offer(node.left); count ++; } if(node.right != null) { queue.offer(node.right); count ++; } if(helper == 0) { llist.add(new ArrayList<Integer>(list)); list.clear(); helper = count; count = 0; } } return llist; } }
2,Binary Tree Level Order Traversal II
给定二叉树:{3,9,20,#,#,15,7},
输出:[[15,7], [9,20], [3]]
这是第一题的变形,仅仅把结果逆序输出,我们用链表中的addFirst()方法就解决了。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { LinkedList<List<Integer>> llist = new LinkedList<List<Integer>>(); List<Integer> list = new ArrayList<Integer>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); if(root == null) return llist; queue.offer(root); int count = 0; int helper = 1; while(!queue.isEmpty()) { TreeNode node = queue.poll(); if(helper > 0) { list.add(node.val); helper --; } if(node.left != null) { queue.offer(node.left); count ++; } if(node.right != null) { queue.offer(node.right); count ++; } if(helper == 0) { llist.addFirst(new ArrayList<Integer>(list)); list.clear(); helper = count; count = 0; } } return llist; } }
下面是二叉树的前序遍历,中序遍历,后序遍历,都属于深搜,我们用堆栈来完成。
3,Binary Tree Inorder Traversal
二叉树的中序遍历,输出所有节点的值。
代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); if(root == null) return list; while(root != null || !stack.isEmpty()) { if(root != null) { stack.push(root); root = root.left; } else { TreeNode node = stack.pop(); list.add(node.val); root = node.right; } } return list; } }
4,Binary Tree Preorder Traversal
二叉树的前序遍历,输出所有节点的值。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); if(root == null) return list; stack.push(root); while(!stack.isEmpty()) { TreeNode tem = stack.pop(); list.add(tem.val); if(tem.right != null) { stack.push(tem.right); } if(tem.left != null) { stack.push(tem.left); } } return list; } }
5,Binary Tree Postorder Traversal
二叉树的后序遍历,输出所有节点的值。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<Integer> postorderTraversal(TreeNode root) { LinkedList<Integer> list = new LinkedList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); if(root == null) return list; stack.push(root); while(!stack.isEmpty()) { TreeNode node = stack.pop(); list.addFirst(node.val); if(node.left != null) { stack.push(node.left); } if(node.right != null) { stack.push(node.right); } } return list; } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 374Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 497Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 429Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 580Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 930Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 673Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 842Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 783You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 704For a undirected graph with tre ...
相关推荐
二叉树是一种在计算机科学中广泛使用的数据结构,它的每个节点最多有两个子节点,通常称为左子节点和右...解压“binarytree.rar”,查看其中的文件,理解数据结构,并根据给定的描述编写代码,以实现二叉树的前序遍历。
在LeetCode的"Balanced Binary Tree"题目中,通常要求判断给定的二叉树是否是平衡的。这个问题可以通过递归或迭代的方式来解决。递归方法是分别检查左子树和右子树是否平衡,以及它们的高度。迭代方法则可以使用层次...
题目中的"recover-the-binary-tree.zip_The Tree"文件包含了一个名为"recover the binary tree.cpp"的源代码文件,这很可能是实现这个恢复过程的C++程序。为了理解并执行这个过程,我们需要了解以下步骤: 1. **...
题目二叉树所有路径题解* Definition for a binary tree node.* function TreeNode(val) {* @para
1.2 Binary Search(二分查找) 1.3 Is Prime(是否是质数) 1.4 Is Ugly Number(是否是丑数) 1.5 Is Power Of Two(是否是2的幂) 1.6 Is Power Of Three(是否是3的幂) 1.7 Count Primes(质数的个数) 2...
leetcode伪代码merge-two-binary-tree 题目解读: 题目来源: 原文: Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the...
在提供的"minimum depth of binary tree"代码中,可能包含了上述的一种或多种解冑策略。解冑代码应该能够处理各种类型的二叉树,包括平衡树和高度不均衡的树,同时具有良好的时间复杂度和空间复杂度。具体实现细节和...
**二叉索引树(Binary Indexed Tree,BIT)**,又称 Fenwick 树,是数据结构中的一个重要概念,尤其在前端工程师的面试中常被问到。它是一种高效的数据结构,用于快速处理数组中区间的求和问题以及部分更新操作。在...
- **Convert Sorted List/Array to Binary Search Tree**:将有序列表或数组转换为二叉搜索树。 - **Path Sum II**:寻找所有从根节点到叶节点的路径,其路径和等于给定的目标值。 - **Flatten Binary Tree to ...
至于提供的压缩包文件`BinaryTree_HeightBalanced-master`,它很可能包含了该问题的解决方案源代码,可能是用Python或其他编程语言实现的。解压后,你将能够看到具体的实现细节,包括如何创建二叉树节点、如何进行...
从标题和描述中可以看到,本文主要关注于LeetCode原题的总结,涵盖了162个题目,包括Find Peak Element、Isomorphic Strings、Group Shifted Strings等,这些题目都是Google Onsite面经中的常见题目。 下面将对这些...
在IT领域,数据结构与算法是编程基础的重要组成部分,...总结,Java中的二叉树题目不仅要求对数据结构有深入理解,还需要灵活运用算法。不断练习和分析这些题目,能够帮助你提高编程技巧,增强在实际工作中的竞争力。
本资源“leetcode_practices_learncard_binarytree”是一份全面的二叉树学习卡片,作者通过Java8语言完成了所有相关题目,旨在帮助学习者深入理解二叉树及其相关算法。 一、二叉树基础 二叉树是一种非线性数据结构...
3. **二分查找** - 如果N个数字按递增顺序存储在单链表中,二分查找的平均时间复杂度不是O(logN),而是线性的O(N),因为链表中没有随机访问。 4. **大O符号** - 表示渐进行为的符号,(logN)^2 是 O(N) 的子集,意味...
代码一的解决方案首先定义了一个`diameterOfBinaryTree`函数,它递归地计算每个子节点的最大深度,并返回当前节点的最大深度。在这个过程中,通过`depth`函数计算节点的深度,同时更新全局变量`max`,存储当前找到的...
- 二叉搜索树(Binary Search Tree, BST):一种特殊的二叉树,其中每个节点的左子树只包含小于当前节点的数,每个节点的右子树只包含大于当前节点的数。 - 红黑树(Red-Black Tree):一种自平衡的二叉搜索树,每条...
从文档中可以看出,这些题目覆盖了各种类型的数据结构和算法,如数组(array)、链表(linked list)、字符串(string)、哈希表(hashtable)、栈(stack)、队列(queue)、二叉树(binary tree)、图(graph)、...
这个标签可能意味着LeetCode的二叉树专题卡片内容是开源的,也就是说,可能有一个开源项目或者代码库(如“leetcode_binary_tree-master”)包含了这些题目的解决方案或者其他学习资源。开源意味着社区可以贡献、...