【算术】输入后序遍历,中序遍历,输出层次遍历

一棵二叉树,分布大写英文字母(最多26个);输入后序遍历,中序遍历的结果。输出层次遍历的结果。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String hx =sc.next();  //后序遍历的字符串
        String zx = sc.next();      //中序遍历的字符串
        //hx:2315764  zx:1234567
        String[] s = new String[]{"", "", "", "", ""};  //最多五层
        int i = 0;
        String r = "";
        String[] zxc = zxc(hx, zx, i, s);
        for (int i1 = 0; i1 < zxc.length; i1++) {
            r+=zxc[i1];
        }
        System.out.println(r);//4163572

    }
    
    /**
     *
     * @param String hx 后序遍历的值
     * @param String zx 中序遍历的值
     * @param int i 二叉树的层级,根节点为0层
     * @param String [] s 每层二叉树作为数组的一个元素,初始各个元素为"",
     * @return String [] s
     */
    public static String[] zxc(String hx, String zx, int i, String[] s) {
        String ss = String.valueOf(hx.charAt(hx.length() - 1)); //根节点
        s[i] += ss;
        String[] zs = zx.split(s[i].substring(s[i].length()-1));
        String hl = hx.substring(0, zs[0].length());
        String hr = hx.substring(zs[0].length(), hx.length() - 1);

        i = i + 1;
        if (i < 4 && hl.length() > 1) {
            zxc(hl, zs[0], i, s);
        } else {
                s[i] += zs[0];

        }
        if (i < 4 && hr.length() > 1) {
            zxc(hr, zs[1], i, s);
        } else {if(zs.length>1){
                s[i] += zs[1];}
        }
        return s;
    }
}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了输出二叉树的层次遍历序列,我们需要先构建这棵二叉树。可以通过后序遍历中序遍历来构建二叉树,具体步骤如下: 1. 后序遍历序列的最后一个元素一定是根节点,将其作为根节点。 2. 在中序遍历序列中找到根节点的位置,根节点左边的元素都是左子树的节点,右边的元素都是右子树的节点。 3. 根据左子树和右子树的节点个数,在后序遍历序列中划分出左子树和右子树的序列。 4. 递归地对左子树和右子树进行上述步骤,构建出完整的二叉树。 构建出二叉树后,我们可以通过层次遍历的方式输出二叉树的层次遍历序列。具体步骤如下: 1. 创建一个队列,将根节点入队。 2. 当队列不为空时,依次取出队列中的节点,将其值加入到层次遍历序列中。 3. 如果该节点有左子节点,则将左子节点入队。 4. 如果该节点有右子节点,则将右子节点入队。 5. 重复步骤2-4,直到队列为空。 下面是Python代码实现: ```python class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None def buildTree(inorder, postorder): if not inorder or not postorder: return None root = TreeNode(postorder[-1]) idx = inorder.index(root.val) root.left = buildTree(inorder[:idx], postorder[:idx]) root.right = buildTree(inorder[idx+1:], postorder[idx:-1]) return root def levelOrder(root): if not root: return [] res = [] queue = [root] while queue: node = queue.pop(0) res.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return res inorder = ['C', 'B', 'A', 'E', 'D', 'F'] postorder = ['C', 'B', 'E', 'F', 'D', 'A'] root = buildTree(inorder, postorder) print(levelOrder(root)) # 输出:['A', 'B', 'D', 'C', 'E', 'F'] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值