剑指offer(17)层次遍历树

题目:

  从上往下打印出二叉树的每个节点,同层节点从左至右打印。

public class Solution {

    ArrayList<Integer> list = new ArrayList<Integer>();
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        if(root==null)
            return list;
        TreeNode node = root;
        Queue<TreeNode> q = new LinkedList<TreeNode>();
        q.offer(node);
        while(!q.isEmpty()){
            node = q.poll();
            if(node.left!=null)
                q.offer(node.left);
            if(node.right!=null)
                q.offer(node.right);
            list.add(node.val);
        }
        return list;
    }
}

  

原文地址:https://www.cnblogs.com/figsprite/p/10477838.html

时间: 2024-08-03 15:51:47

剑指offer(17)层次遍历树的相关文章

【Java】 剑指offer(17) 在O(1)时间删除链表结点

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 思路 通常那样从头开始查找删除需要的时间为O(n),要在O(1)时间删除某结点,可以这样实现:设待删除结点i的下一个结点为j,把j的值复制到i,再把i的指针指向j的下一个结点,最后删除j,效果就相当于删除j. 注意特殊情况:1.当待删除结点i为尾结点时,无下一个结点,则只能从头到尾顺序遍历:2.当链

[剑指Offer] 17.树的子结构

[思路]要查找树A中是否存在和树B结构一样的子树,可以分成两步: 1.第一步在树A中找到和B的根节点的值一样的结点R:即当前树A包含子树B,HasSubtree(...) 2.第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构.即当前树A是否是子树B,IsSubtree(...) 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x

剑指offer 17. 代码的鲁棒性 树的子结构

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路:先比较数A的根结点是否等于B的根结点, 如果不同,则比较A的左结点是否跟B的根结点相同    如果不同·,则比较A的右结点是否跟B的根结点相同 一直这样比下去,直达遍历完整两棵树,看是否A包含B 具体代码实现如下: public class HasSubtree {public boolean HasSubtree(TreeNode root1,TreeNode root2) { bo

剑指Offer 17. 树的子结构 (二叉树)

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目地址 https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&tqId=11170&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 如果树1或树2为空时,返回False 在树

【剑指offer】十一。树的子结构

题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 分析:两棵树A 和B,判断B是不是A的子树,分为三种情况,一,A的根和B的根相同,则继续比较A的左子树与B的左子树,A的右子树与B的右子树.二,若A的根和B的根不同,这比较B是不是在A的左子树中,三,比较B是不是在A的右子树中.代码如下: 1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null

【剑指offer】广度优先遍历二叉树

问题:从上往下打印出二叉树的每个节点,同层节点从左至右打印. *思路:先用队列存放树的根结点.每次出队一个结点,将结点非空的左右孩子分别入队.重复此过程,直到队列为空. 1 import java.util.ArrayList; 2 /** 3 public class TreeNode { 4 int val = 0; 5 TreeNode left = null; 6 TreeNode right = null; 7 8 public TreeNode(int val) { 9 this.v

《剑指Offer》题目:树的子结构

题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否有相同的结构 Java代码: class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class

【剑指offer】Q18:树的子结构

类似于字符串的匹配,我们总是找到第一个匹配的字符,在继续比較以后的字符是否所有同样,假设匹配串的第一个字符与模式串的第一个不同样,我们就去查看匹配串的下一个字符是否与模式串的第一个同样,相应到这里,就是我们要遍历root1,找到与root2同样的第一个结点,若root1的根不同样,那么我们查找其左子树是否有第一个同样的,同样的操作再去看右子树是否有同样的第一个,若找到了第一个同样的,与字符串匹配思想一样,字符串匹配中,是比較以后的字符是否所有同样,这里我们比較其左右子树是否 也相应同样,若找到了

剑指offer 17:合并两个有序链表

题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解题思路 链表基础操作考察,难点在于对于输入数据的把握,一定要考虑输入数据的全面性 1.出现单链表为NULL: 2.两个链表都为NULL: 3.一个链表遍历完成,另一链表还有剩余的节点 4.两个链表等长: 下面给出具体C++代码实现: /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), n