【剑指offer】面试题32:从上到下打印二叉树(java)

从上往下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如输入下图的二叉树,则一次打印出8,6,10,5,7,9,11。

思路:利用队列,将左右子树加入队列末尾,取出结点

代码:

package offer;

import java.util.LinkedList;
import java.util.Queue;

class BineryTree
{
    int val;
    BineryTree left = null;
    BineryTree right = null;
    BineryTree(int val)
    {
        this.val = val;
    }
}
public class ti32 {
    static void BineryTreeToQueue(BineryTree head)
    {
        if(head==null)
        {
            return;
        }
        Queue<BineryTree> queue = new LinkedList<BineryTree>();
        queue.add(head);
        while(!queue.isEmpty())
        {
            BineryTree x = queue.poll();
            System.out.println(x.val);
            if(x.left!=null)
            {
                queue.add(x.left);
            }
            if(x.right!=null)
            {
                queue.add(x.right);
            }
        }
    }
    public static void main(String[] args)
    {
        BineryTree a = new BineryTree(8);
        BineryTree b = new BineryTree(6);
        BineryTree c = new BineryTree(10);
        BineryTree d = new BineryTree(5);
        BineryTree e = new BineryTree(7);
        BineryTree f = new BineryTree(9);
        BineryTree g = new BineryTree(11);
        a.left = b;
        a.right = c;
        b.left = d;
        b.right = e;
        c.left = f;
        c.right = g;
        BineryTreeToQueue(a);
    }
}
题目三
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

代码:

package offer;

import java.util.ArrayList;
import java.util.Stack;

class BineryTree
{
    int val;
    BineryTree left = null;
    BineryTree right = null;
    BineryTree(int val)
    {
        this.val = val;
    }
}
public class ti32 {
    static ArrayList<ArrayList<Integer>> BineryTreeToQueue(BineryTree head)
    {
        ArrayList<ArrayList<Integer>> alist = new ArrayList<>();
         
        if(head==null)
        {
            return alist;
        }
        Stack<BineryTree> stack1 = new Stack<BineryTree>();
        Stack<BineryTree> stack2 = new Stack<BineryTree>();
        stack1.add(head);
        while(!stack1.empty()||!stack2.empty())
        {
            ArrayList<Integer> list = new ArrayList<>();
                if(!stack1.empty())
                {
                    while(!stack1.empty())
                    {
                        BineryTree x = stack1.pop();
                        list.add(x.val);
                        if(x.left!=null)
                        {
                            stack2.add(x.left);
                        }
                        if(x.right!=null)
                        {
                            stack2.add(x.right);
                        }
                    }
                    
                }
                else
                {
                    while(!stack2.empty())
                    {
                        BineryTree x = stack2.pop();
                        list.add(x.val);
                        if(x.right!=null)
                        {
                            stack1.add(x.right);
                        }
                        if(x.left!=null)
                        {
                            stack1.add(x.left);
                        }
                    }
                    
                }
                alist.add(list);
            }
        return alist;
        }
    
    public static void main(String[] args)
    {
        BineryTree a = new BineryTree(8);
        BineryTree b = new BineryTree(6);
        BineryTree c = new BineryTree(10);
        BineryTree d = new BineryTree(5);
        BineryTree e = new BineryTree(7);
        BineryTree f = new BineryTree(9);
        BineryTree g = new BineryTree(11);
        a.left = b;
        a.right = c;
        b.left = d;
        b.right = e;
        c.left = f;
        c.right = g;
        ArrayList<ArrayList<Integer>> alist = BineryTreeToQueue(a);
        for(int i=0;i<alist.size();i++)
        {
            for(int j=0;j<alist.get(i).size();j++)
            {
                System.out.print(alist.get(i).get(j)+" ");
            }
            System.out.println();
        }
    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cache命中率、平均访问时间、访问效率的计算公式

cache命中率、平均访问时间、访问效率的计算公式 cache命中率 平均访问时间 访问效率 使用cache可以提高计算机的性能&#xff0c;也提高了主存访问的效率

全息技术“量子飞跃”或彻底改变成像技术

作者&#xff1a;冯卫东 来源&#xff1a;科技日报科技日报北京2月9日电 &#xff08;记者冯卫东&#xff09;据最新一期《自然物理学》报道&#xff0c;英国格拉斯哥大学的物理学家首次找到使用量子纠缠光子来将信息编码为全息图的方法。这一突破了传统全息方法局限性的新型量…

(三)PYTHON字典 元祖 列表尝试应用

&#xff08;三&#xff09;PYTHON字典 元祖 列表尝试应用 1、 使用 join 方法将下划线添加到列表的每一个元素拼接成字符串&#xff0c;li &#xff1d; [alex, eric, rain] li [boom, TNT, zhadan] daying "_".join(li) print(daying) 2、 查找列表中元素&#…

定点数与浮点数的表示方法

计算机组成原理——定点数与浮点数 计算机中常用的数据表示格式有两种&#xff0c;一是定点格式&#xff0c;二是浮点格式。一般来说&#xff0c;定点格式容许的数值范围有限&#xff0c;要求的处理硬件比较简单。而浮点格式容许的数值范围很大&#xff0c;要求的处理硬件比较…

【剑指offer】面试题33:二叉搜索树的后序遍历序列

输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true。否则返回false。假设输入的数组的任意两个数字都互不相同。 代码&#xff1a; package offer; public class ti33 { static boolean VerifyTree(int nums[],int start,in…

AI 3.0》王飞跃教授推荐序——未来智能:人有人用,机有机用

☉ 王飞跃中国自动化学会监事长中国科学院自动化研究所复杂系统管理与控制国家重点实验室主任来源&#xff1a;德先生转自&#xff1a;中国自动化学会初见梅拉妮米歇尔之名&#xff0c;还是20世纪80年代末研究她与侯世达关于类比推理的开创性程序“Copycat”&#xff08;拷贝猫…

计算机组成原理——计算机系统的性能指标(机器字长、存储容量、运算速度)

计算机组成原理——计算机系统的性能指标 计算机系统的性能指标&#xff08;机器字长、存储容量&#xff0c;运算速度&#xff09;&#xff1a; 1. 吞吐量&#xff1a; 一台计算机在某一时间间隔内能够处理的信息量。 2. 响应时间&#xff1a; 从输入有效到系统产生响应之间…

【剑指offer】面试题34:二叉树中和为某一值的路径

输入一颗二叉树和一个整数&#xff0c;打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 代码&#xff1a; package offer; import java.util.ArrayList; class BineryTree1 { int val; Bine…

自动驾驶发展调查:产业化还需技术“破冰”

来源&#xff1a;机器学习研究组订阅/ 导读 /在汽车产业转入存量博弈时代的关键节点&#xff0c;出行领域的变革也随之蓄势待发。汽车制造厂商、出行平台以及科技公司纷纷抢滩自动驾驶赛道。作为一个处于发展初期的产业&#xff0c;自动驾驶从技术路线到落地场景&#xff0c;从…

计算机组成原理——机器字长、指令字长、存储字长

计算机组成原理——机器字长、指令字长、存储字长 字长&#xff1a; 字长&#xff1a; 一个字中的二进制位的位数&#xff0c;是计算机系统结构中的一个重要特性。字长在计算机结构和操作的多个方面均有体现。计算机中大多数寄存器的大小是一个字长。计算机处理的典型数值也可…

【剑指offer】面试题35:复杂链表的复制(Java 实现)

请实现函数ComplexListNode* Clone(ComplexListNode * pHead),复制一个复杂链表。在复杂链表中&#xff0c;每个结点除了有一个m_pNext指针指向下一个结点外&#xff0c;还有一个m_pSibling指向链表中的任意结点或者NULL。结点的C定义如下&#xff1a; struct ComplexListNode…

人类倾向于高估人工智能的进步,低估自身智能的复杂性-读《AI 3.0》

有很多关于人工智能的书。亚马逊网站上就有20,000本。其中很多书都有戏剧性的标题&#xff0c;比如《生命3.0》 &#xff0c;《终极算法》 &#xff0c;尤其是《奇点来临》。梅勒妮 米切尔的新书的标题更加谦虚&#xff0c;但是在我看来&#xff0c;在这个主题上&#xff0c;它…

计算机操作系统——死锁(产生的必要条件与处理死锁的四个关卡)

计算机操作系统——死锁 前言&#xff1a;死锁&#xff1a;指多个进程因竞争共享资源而造成的一种僵局&#xff0c;若无外力作用&#xff0c;这些进程都将永远不能再向前推进。如果死锁发生&#xff0c;会浪费大量的系统资源&#xff0c;甚至会导致系统崩溃。 关于死锁的结论…

【剑指offer】面试题36:二叉搜索树与双向链表(java)

输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点&#xff0c;只能调整树中节点指针的指向。 代码&#xff1a; package offer; class BineryTreeNode { int val; BineryTreeNode left null; BineryTreeNo…

科学难题的形成

来源&#xff1a;肖建华科学网博客传统上&#xff0c;把科学理论分为两类&#xff1a;唯象性科学理论和哲学性科学理论。大致而言&#xff0c;工程科学是以具体现象类来划分学科&#xff0c;此类学科的理论一般称为唯象性理论。而把各学科的共性特征抽象出来作为研究对象而建立…

冯·诺依曼计算机特点

冯诺依曼计算机特点 冯诺依曼&#xff0c;20世纪最重要的数学家之一。在现代计算机、博弈论、核武器和生化武器等众多领域内有杰出建树的最伟大的科学全才之一&#xff0c;被后人称为“计算机之父”和“博弈论之父”。 一、冯诺依曼计算机结构&#xff08;以运算器为中心&…

计算机操作系统——经典进程的同步问题

计算机操作系统——信号量机制与经典进程的同步问题 信号量机制 随着发展&#xff0c;信号量从整型信号量经记录型信号量&#xff0c;进而发展为“信号量集”机制。 一般来说&#xff0c;信号量的值与相应的资源的使用情况有关。 信号量的值仅由P、V操作改变。 信号量的初值…

【剑指offer】面试题39:数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 代码&#xff1a; class Solution { public int majorityElement(in…

2020年度全球人工智能十大事件

该文章内容转载自战略前沿技术当前&#xff0c;新一代人工智能技术在全球蓬勃兴起&#xff0c;迅猛发展&#xff0c;与大数据、区块链、5G等新技术相互融合、相互因应&#xff0c;为经济社会发展尤其是数字经济发展注入新动能&#xff0c;正在深刻改变社会生产生活方式。与此同…

一头扎进sql之多表操作

一、多表查询时NULL值处理 要求返回比"allen"工资低的所有员工select a.ename,a.conn from emp a where a.conn < (select b.conn from emp b where b.ename allen) ; 正确的写法应该是select a.ename,a.conn from emp a where coalesce(a.conn,0) < (se…