zoukankan      html  css  js  c++  java
  • 1030 求先序排列

    难度:普及-(普及)

    题目类型:字符串/树形结构

    提交次数:1

    涉及知识:二叉树

    题目描述

    给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。

    代码:

     1 #include<iostream>
     2 using namespace std;
     3 string x, y;
     4 //表示输出一个中序排列为x[l1]-x[r1],后续排列为y[l2]-y[r2]的二叉树的前序排列
     5 void tree(int l1, int r1, int l2, int r2){ 
     6     if(l1 > r1) return;
     7     if(l1 == r1){
     8         cout<<x[l1];
     9         return;
    10     }
    11     else{
    12         cout<<y[r2];
    13         int k = x.find(y[r2]);
    14         tree(l1, k-1, l2, l2+k-1-l1);
    15         tree(k+1, r1, l2+k-l1, r2-1);
    16     }
    17 }
    18 int main(){
    19     int len;
    20     cin>>x>>y;
    21      len = x.length();
    22      tree(0, len-1, 0, len-1);
    23     return 0;
    24 }

    备注:

    老题,第一次做的时候随便抄了抄,也没怎么看懂。这一次经过我的深思熟虑,嗯,tree(int l1, int r1, int l2, int r2)表示输出一个中序排列为x[l1]-x[r1],后续排列为y[l2]-y[r2]的二叉树的前序排列。14、15行的参数就好算了。有一个小问题,就是14、15行前不能加return啊!加了以后不就只能返回左子树了吗。。太愚蠢了。。

  • 相关阅读:
    7.18学习日志
    7.16学习日志
    5 Things They Never Tell You About Making iPhone Apps
    MantisBT
    25款实用的桌面版博客编辑器
    【转】如何学会600多种编程语言
    开发者如何提升和推销自己
    CleanMyMac 1.10.8
    VMWARE FUSION 6 KEY
    cocos2dx shader
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/5798277.html
Copyright © 2011-2022 走看看