zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    OpenStack--Havana
    腾讯云万象优图每个账户提供50G的图片存储(支持黄图检测)
    Java 脚本化编程指南
    hive的表的基本操作
    如何搭建易企秀H5平台?
    HDU 4727-The Number Off of FFF
    审计厅审计云发展意见
    CNPM 遇到use strict的问题
    QA技术概览
    终端的CTRL+S 解说
  • 原文地址:https://www.cnblogs.com/WayneZeng/p/3026909.html
Copyright © 2011-2022 走看看