• 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法


    【试题描述】:  给定二叉树先序中序,建立二叉树的递归算法

          其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离。在中序序列中找到 确定的根节点,根据中序遍历特性,在巾序序列中,根节点前面的序列即为左子树的中序遍历序列,根节点后面的即为右子树的中序遍历序列。由左右子树的中序序列长度,在该二又树的先序序列中即可找到左右子树的先序序列的分界点,从而得到二叉树的左右子树的先序序列。


    递归实现:
    递归函数输入:二叉树的先序序列和中序序列;返回-、建好的二叉树的根节点。
    算法思想:
    1)若二叉树空,返回空;
    2)若不空,取先序序列第一个元素,建立根节点;
    3)在中序序列中查找根节点,以此确定左右子树的先序序列和中序序列;
    4)递归调用自己,建左子树;
    5)递归调用自己,建右子树。 

    【参考代码】

     1 public static TreeNode createBT(String pres, String ins)
     2     {
     3         int inpos = 0;
     4         TreeNode root;
     5         String leftPres, leftIns, rightPres, rightIns;
     6 
     7         if (pres.length() == 0 || ins.length() == 0)
     8             return null;
     9         else
    10         {
    11             root = new TreeNode(pres.charAt(0));
    12             while (ins.charAt(inpos) != root.value)
    13                 inpos++;
    14             leftPres = pres.substring(1, inpos + 1);
    15             leftIns = ins.substring(0, inpos);
    16 
    17             root.left = createBT(leftPres, leftIns);
    18             rightPres = pres.substring(inpos + 1, pres.length());
    19             rightIns = ins.substring(inpos + 1, ins.length());
    20             root.right = createBT(rightPres, rightIns);
    21         }
    22         return root;
    23     }
    24 
    25 class TreeNode
    26 {
    27     public char value;
    28     public TreeNode left;
    29     public TreeNode right;
    30 
    31     public TreeNode(char value)
    32     {
    33         this.value = value;
    34     }
    35 }
  • 相关阅读:
    运维相关
    五指MUD协议
    android 超简单的拖动按钮 悬浮按钮 吸附按钮 浮动按钮
    find_player 不查找已经晕到玩家的问题
    练英语资源
    Java泛型
    JAVA WEB开放中的编码问题
    PHP初中高级学习在线文档下载
    springmvc请求参数获取的几种方法
    游戏数值——LOL篇 以LOL为起点-说游戏数值设计核心思路
  • 原文地址:https://www.cnblogs.com/WayneZeng/p/3026909.html
Copyright © 2020-2023  润新知