bash输出Y型二叉树

bash输出Y型二叉树

题目要求,输入的N要在1~5之间,输出Y型2叉树,当N=1时“Y”的高度是32,只有一层。当N=2时,有两层,第一层的Y的高度是32,第二层Y的高度是16,而且有两个“Y”。以此类推至5层。

#!/bin/bash

read N
rows=63
cols=100
declare -A arr

for ((i=0 ; i < rows ; i++))
do
    for (( j=0 ; j<cols ; j++))
    do
        arr[$i,$j]='_'
    done
done


function tree(){
#$1=y,$2=x,$3=height,$4=N
if (($4>=1 && $4<=5))
then
    for ((i=0; i<$3 ;i++));do
         arr[$(($1-i)),$2]='1'
         arr[$(($1-$3-i)),$(($2-i-1))]='1'
         arr[$(($1-$3-i)),$(($2+i+1))]='1'
    done

    tree $(($1-$3*2)) $(($2-$3)) $(($3/2)) $(($4-1))
    tree $(($1-$3*2)) $(($2+$3)) $(($3/2)) $(($4-1))
fi
}


tree 62 49 16 $N


for ((i=0 ; i < rows ; i++))
do
    for (( j=0 ; j<cols ; j++))
    do
        echo -n ${arr[$i,$j]}
    done
    echo
done

本来没想用递归,想逐一计算出输出位置,其实也是有规律的,不过超级麻烦。一会自己绕迷糊了。

  • 在bash中二维数组的方括号里不能有空格
  • 取出数组中的数据要用属性扩展${},而不能用表达式扩展$(())
  • echo ${#str},会输出str中字符的长度;echo ${str:1:3},会输出切片字符,切片索引从0开始,并且是闭区间(也就是包含当前字符)。

Comments are closed.