java面试之手撕代码

在最近的面试中,面试官经常要面试者手撕代码,哎奈何本人只知道原理,一到手撕就死乔乔了。

第一题:宜信一面手撕代码之写代码实现一个栈的的前序遍历:

第一步、要构造节点类

public class Node {
    private int data;
    private Node leftChild;//左孩子
    private Node rightChild;//右孩子

    public Node(int data,Node leftChild,Node rightChild){
        this.data = data;
        this.leftChild = leftChild;
        this.rightChild = rightChild;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public Node getLeftChild() {
        return leftChild;
    }

    public void setLeftChild(Node leftChild) {
        this.leftChild = leftChild;
    }

    public Node getRightChild() {
        return rightChild;
    }

    public void setRightChild(Node rightChild) {
        this.rightChild = rightChild;
    }
}

第二步、使用遍历的方法写写前序遍历

public class BinaryTree {
    //注意必须逆序建立,先建立子节点,再逆序往上建立,
    //因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,
    //不逆序建立会报错
     public Node init() {
            Node J = new Node(8, null, null);
            Node H = new Node(4, null, null);
            Node G = new Node(2, null, null);
            Node F = new Node(7, null, J);
            Node E = new Node(5, H, null);
            Node D = new Node(1, null, G);
            Node C = new Node(9, F, null);
            Node B = new Node(3, D, E);
            Node A = new Node(6, B, C);
            return A;   //返回根节点
        }

        public void printNode(Node node){
            System.out.print(node.getData());
        }
        //先序遍历的顺序中左右
        public void theFirstTraversal(Node root) {
            printNode(root);
            if (root.getLeftChild() != null) {  //使用递归进行遍历左孩子
                theFirstTraversal(root.getLeftChild());
            }
            if (root.getRightChild() != null) {  //递归遍历右孩子
                theFirstTraversal(root.getRightChild());
            }
        }
       //中序遍历,左中右
        public void theInOrderTraversal(Node root) {
            if(root.getLeftChild() != null){
                theInOrderTraversal(root.getLeftChild());
            }
            printNode(root);
            if (root.getRightChild() != null) {
                theInOrderTraversal(root.getRightChild());
            }
        }
        //此处还有后序遍历没有写,有兴趣的可以仿照写
}

原文地址:https://www.cnblogs.com/xiaonantianmen/p/9786503.html

时间: 2024-10-10 23:17:45

java面试之手撕代码的相关文章

2019字节跳动面试时手撕代码题(持续更新~)

1. N 阶乘末尾0的个数. 输入描述: 输入为一行,n(1 ≤ n ≤ 1000) 输出描述: 输出一个整数,即题目所求解法:要判断末尾有几个0就是判断可以整除几次10.10的因子有5和2,而在0~9之间5的倍数只有一个,2的倍数相对较多,所以本题也就转换成了求N阶乘中有几个5的倍数.也就是每多出来一个5,阶乘末尾就会多出来一个0,这样n / 5就能统计完第一层5的个数,依次处理,就能统计出来所有5的个数.同一个思想两种写法. 题解: 要判断末尾有几个0就是判断可以整除几次10.10的因子有5

【面试必备】手撕代码,你怕不怕?

Part 1.生产者-消费者问题这绝对是属于重点了,不管是考察对于该重要模型的理解还是考察代码能力,这都是一道很好的考题,所以很有必要的,我们先来回顾一下什么是生产者-消费者问题: 问题简单回顾 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家. 生产者消费者问题(英语:Producer-consumer pr

手撕代码之反转单链表

今天去际链面试,结果在coding这一关又折了. 那就总结一下吧,就当再手撕一下代码 首先定义一个listNode: public class listNode { int data; listNode next; public listNode(int data, listNode next) { this.data = data; this.next = next; } } 定义方法: public class listNodeReverse { public static void mai

手撕代码:判断二进制串除以3的余数

题目描述: 给定一个长二进制串,求其除以3的余数 思路分析: 这里涉及到状态机,由于除以三的余数只可能是0,1,2.所以状态机就有三个状态.现在逐个遍历二进制串,初始余数为0,当遇到1时,状态转到1,遇到0时状态仍为0.对于状态1,判断分别遇到0和1的状态变换:遇到0,即余数为2转到状态2:遇到1,即余数为0转到状态0.可以发现,对于每个数在其后添加0相当于乘2,加1相当于乘2加1. 代码: 1 int numRest(string s) 2 { 3 int n = s.length(); 4

Java面试必备:手写单例模式

面试官:请手写下几种常见的单例模式 我:好的(面带微笑),心里暗喜(送分题). 没成想提笔便写出了如此豪放的代码,不堪回首,请原谅我的不羁! 此篇整理了几种常见的单例模式代码示例,再有面试官让手撕单例模式,便能心中有码,下笔有神. 为什么要有单例模式 实际编程应用场景中,有一些对象其实我们只需要一个,比如线程池对象.缓存.系统全局配置对象等.这样可以就保证一个在全局使用的类不被频繁地创建与销毁,节省系统资源. 实现单例模式的几个要点 首先要确保全局只有一个类的实例. 要保证这一点,至少类的构造器

2020 Java核心面试问题 100+(附代码)

[本文参考原文地址]http://bjbsair.com/2020-03-09/it/1875/ 毋庸置疑,Java是获得丰厚薪资的主要编程选择之一.毕竟,基于类的通用,面向对象的编程语言是世界上使用最广泛的编程语言之一. Java面试问题 具有许多强大的功能,编程语言不仅是经验丰富的专家的首选,而且是编程领域的新手所追求的.因此,这里有一些重要的Java面试问题,可以帮助您完成Java工作,或者至少可以提高您的学习水平. 问题:什么是Java? 答:?Java是一种最初由James Gosli

java面试大汇总

java面试笔试题大汇总     第一,谈谈final, finally, finalize的区别. 最常被问到. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统). 第四,&和&&的区别. 这个问得很少. 第五,HashMap和Hashtable的区

普华永道高级JAVA面试记录

最近在考虑换个工作 原因?咱能不逗吗? 一面感觉发挥不错  二面之后累觉不爱  基本上浪费了半天的工资(好多钱啊~~~) PWD上海地址在浦东软件园  工作环境说实话没我现在工作的环境好,不过里面的人给人感觉不错.前台不NICE但给人很舒服的感觉. 说重点,面试过程. 面试分笔试和面试  笔试面试都是英文(回答问题要是实在英文撑不住了就用中文) 笔试题偏基础  说两个注意点  手写冒泡排序  和 用英文描述一个设计模式 面试有两次 第一个考官是个微胖界的胖子(很和蔼)  第二个有点娘(很刁钻)

Java面试总结(2017.10)

Java面试总结(2017.10) 把最近一个月的面试经历总结一下吧.期间有面试大数据和java,以下主要针对java大概总结一下. 一.某滴(套路:项目.数据结构.算法.数据库.多线程) 1.手写链表反转.二分查找(有序循环数组 4 5 1 2 3) 2.mysql索引,哪些地方影响性能? 3.jdk1.8 hashmap 的变化? 数组+树,数组加表  空间复杂度 4.hashmap的结构优化? 5.concurrenthashmap机制? 6.hbase,为什么要有列族? 7.rabbit