循环二叉树(去哪儿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);
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

动态规划之01背包问题(最易理解的讲解)

转载地址:http://blog.csdn.net/mu399/article/details/7722810 01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我...

01背包问题

动态规划的基本思想: 将一个问题分解为子问题递归求解,且将中间结果保存以避免重复计算。通常用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上的求解...
  • FG2006
  • FG2006
  • 2011年09月10日 22:16
  • 44878

2007年北京大学计算机研究生机试真题 二叉树

2007年北京大学计算机研究生机试真题 二叉树题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少...

PAT甲级真题及训练集(20)--1086. Tree Traversals Again (25)(前序,中序建二叉树,很重要!)

1086. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 St...

1115. Counting Nodes in a BST (30)-PAT甲级真题(二叉树的遍历,dfs)

1115. Counting Nodes in a BST (30) A Binary Search Tree (BST) is recursively defined as a binary tr...
  • liuchuo
  • liuchuo
  • 2016年08月16日 00:01
  • 363

百度2017春招笔试真题

好久不写题,DP都这么生疏了,想不到复杂度合适的DP。。。

红包的收益(人人网2017春招真题)

如你所知,中国素来有发红包的习俗。 新年要到了,小明想要知道朋友圈里每个人的收益。 每个人有mi数量的钱用来发红包,并且这笔钱会平均地发给ki个人(收益得到的钱不再发红包)。 而且发给每个人的钱...

多线程协作打印 (完美世界2017秋招真题)

建立m个线程,每个线程只能打印一种字符,要求线程同时运行,交替打印n次字符。 比如: n=3 m=2打印字符为A和B。要求线程1打印3次A,线程2打印3次B,在屏幕输出ABABAB 注意: 需要检...

网易2017春招笔试真题编程题集合--Python

注:笔试题摘自牛客网,一共十二道编程题。以下包括题目描述,个人思路,正确结果 1. 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个...

网易2017春招笔试真题编程题集合——4.消除重复元素

java-注解网易2017春招笔试真题编程题集合——4.消除重复元素题目: 小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:循环二叉树(去哪儿2017校招真题)
举报原因:
原因补充:

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