循环二叉树(去哪儿2017校招真题)

原创 2017年09月13日 20:24:33

题目描述

循环二叉树(去哪儿2017校招真题)

思路分析

使用一个map存放关联的父子节点(key:子节点,value:父节点),key & value初始化为node1节点
使用一个Node类型对象作为父节点,对每一步,进行如下操作:
    若向左走并且左子节点不为空,则将左子节点及其父节点放入map,更新父节点p为其左子节点;
    若向右走并且右子节点不为空,则将右子节点及其父节点放入map,更新父节点p为其右子节点;
    若回退并且父节点不为空,更新父节点p为其父节点 
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

class Node {
    public int v;
    public Node left;
    public Node right;
}

class Tree {
    public Node node1;
    public Node node2;
    public Node node3;
    public Node node4;
    public Node node5;

    public Tree() {
        node1 = new Node();
        node2 = new Node();
        node3 = new Node();
        node4 = new Node();
        node5 = new Node();

        node1.v = 1;
        node1.left = node2;
        node1.right = node3;

        node2.v = 2;
        node2.left = node3;
        node2.right = node4;

        node3.v = 3;
        node3.left = node4;
        node3.right = node5;

        node4.v = 4;
        node4.left = node5;
        node4.right = node1;

        node5.v = 5;
        node5.left = node1;
        node5.right = node2;

    }
}

public class Main {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = null;

        while (sc.hasNext()) {
            str = sc.nextLine();

            // 存放关联的父子节点的map
            Map<Node, Node> map = new HashMap<Node, Node>();
            Tree tree = new Tree();
            map.put(tree.node1, tree.node1);

            // 父节点
            Node p = tree.node1;    

            for (int i = 0; i < str.length(); i++) {
                // 向左走
                if (str.charAt(i) == 'L') {
                    if (p.left != null) {
                        map.put(p.left, p);
                        p = p.left;
                    }
                }

                // 向右走
                if (str.charAt(i) == 'R') {
                    if (p.right != null) {
                        map.put(p.right, p);
                        p = p.right;
                    }
                }

                // 回退
                if (str.charAt(i) == 'B') {
                    if (map.get(p) != null) p = map.get(p);
                }
            }
            System.out.println(p.v);
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

二分查找(去哪儿校招题)

二分查找1、题目: 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在...

去哪儿2017校园招聘笔试题

import java.util.Scanner;/** * filename extension * 时间限制:C/C++语言 1000MS;其他语言 3000MS * 内存限制:C/C++语...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

去哪儿网2017校招软件开发类编程题

字 符 串                        ...

2017春招去哪儿笔试

不是很难,但是 lz 很菜。。。 第一题 题解#include #include #include #include #include #define N 1000 usin...

2014.9.23——去哪儿网校招笔试

9月23日上午参加来去哪儿网的校招笔试。 试卷共7题,前3题是程序题(2必须+1选做),接着是前端2题,最后是测试2题。 程序题要求使用熟悉的语言即可。分别是: 1、实现...

寻找Coder(去哪儿2016校招)

寻找Coder1、题目: 请设计一个高效算法,再给定的字符串数组中,找到包含”Coder”的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照”Coder”出现的次数递减排列,...

去哪儿网校园招聘java开发面试回忆

去哪儿网 校园招聘 面试 java 笔试。

2014去哪儿网校园招聘笔试(10.13北京)

三道大题+两题TestCase 编程题 Q1:实现一个字符串反转,规则如下: 输入一个字符串str,一个分隔符delim,要求实现对分隔符之间的字符串做反转操作,但是其内部顺序不变。 接口: stri...

android 仿去哪儿首页效果

首先上效果图 第一张图是进入该界面的效果,顶部是一个viewpager,下面每个块都是自定义的view HomeButton,第二张图是点击右边第一个方块的效果,点击时方块整体有收缩的效果,...

【去哪儿】笔试

去哪儿笔试
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)