注意层序遍历的时候对每一层的处理方式可能不同,这里把每一层的元素保存进一个List中了,那么就需要记录每一层的数量. public List<List<Integer>> search(TreeNode root){ List<List<Integer>> result = new ArrayList<List<Integer>>(); Queue<TreeNode> queue = new LinkedList<T…
一.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 二.思路 二叉树的层次遍历,可以借助队列实现.具体思路详见注释. 三.代码 import java.util.ArrayList; import java.util.LinkedList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val…
问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若有右子树,将其加入队列. 3.直到队列为空,表明已经打印完所有结点. 代码: import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; public class TreeNode { int va…
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入图4.5中 的二叉树,则依次打印出8.6.10.5.7.9.11二叉树结点的定义如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; 我们以如下二叉树为例: / \ / \ / \ 这道题实际上二叉树层次遍历方法: 解题步骤如下: 1.设置一个deque双端队列,将根节点加入队列…
//本题思路就是层次遍历二叉树,使用一个队列来模拟过程 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<…
面试题 23. 链表中环的入口节点…
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 很明显,这是一个广度优先遍历. 需要一个队列容器来保存结点,具体操作: 1.将根结点压入队列中,并打印根结点:如果根结点有子结点,将左右子结点依次压入队列的尾部: 2.如果队列不为空,从队列头部取出结点,重复步骤1,直至队列为空. 推广: 不管是广度优先遍历一个有向图还是一棵树,都要用到队列: 第一步就把起始结点(对树而言是根节点)放入队列中:接下来每一次从队列的头部取出一个结点,遍历这个结点之后把从它能到达的结点(对树而言…
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: bfs,队列. 注意,队列最后不要忘了pop(). 代码: /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: vector<int> PrintFromT…
题目: 输入一个链表的头结点,从尾到头反过来打印每个结点的值. 链表结点定义: struct ListNode{ int value; ListNode* pNext; }; 思路: 1.改变链表结构的话,先反转链表,然后从头到尾打印每个结点的值.(后续博文会有相关实现,这里就暂不实现) 2.无需改变链表结构,使用栈,遍历整个链表,将结点依次入栈,然后再依次出栈,实现“后进先出”. 3.无需改变链表结构,递归实现,如果链表结点数过多的话,可能会导致栈溢出. 代码: void PrintListR…
题目描述: 输入一个链表,从尾到头打印链表每个节点的值.返回新链表. import java.util.Stack; //定义链表结构 class ListNode { int value; ListNode next; } public class PrintListReverse { public static void main(String[] args) { ListNode node1 = new ListNode(); ListNode node2 = new ListNode()…