打印由ABCDEFG组成的三角形

这篇博客展示了如何用Java编程实现一个打印出由'A'到'G'字符构成三角形的代码示例。通过双重循环控制空格和字符的输出,形成了一个倒置的三角形状。
/**今天给大家介绍一下打印由ABCDEFG组成的三角形,
                 A 
            B B B 
       C C C C C 
   D D D D D D D 
        E E E E E E E E E 
              F F F F F F F F F F F 
        G G G G G G G G G G G G G 
 */

public class Day202 {
public static void main(String[] args) {

char[] cs = {'A','B','C','D','E','F','G'};
for(int i=1;i<=cs.length;i++){  // 遍历循环

// for(int j=i;j<cs.length;j++){   //控制空格数
// System.out.print("\t");
// }

for(int j=cs.length;j>i;j--){   // 总共是七个,由于在外层循环减掉了一个  
System.out.print("\t");
}
for(int j=1;j<i*2;j++){    // 如果是从0开始就减一   (int j=0;j<i*2-1;j++)
System.out.print(cs[i-1]+"\t");  //由于是从1开始的我就减一
}
System.out.println();
}
}
}

### 分析原理 - 前序遍历(根 - 左 - 右):首先访问根节点,然后递归遍历左子树,最后递归遍历右子树。 - 中序遍历(左 - 根 - 右):先递归遍历左子树,然后访问根节点,最后递归遍历右子树。 ### 还原二叉树 前序遍历的第一个元素是根节点,所以根节点为 A。在中序遍历中,根节点 A 左边没有元素,右边是 BCDEFG,这表明该二叉树没有左子树,右子树包含节点 BCDEFG。 对右子树重复上述过程,前序遍历中右子树部分的第一个元素是 B,在中序遍历中 B 左边没有元素,右边是 CDEFG,说明 B 的左子树为空,右子树包含 CDEFG。 依此类推,最终可以还原出该二叉树的结构:这是一棵每个节点只有右子节点的二叉树,即每个节点都没有左子树。其结构为 A 是根节点,A 的右子节点是 B,B 的右子节点是 C,C 的右子节点是 D,D 的右子节点是 E,E 的右子节点是 F,F 的右子节点是 G。 ### 求后序遍历 后序遍历(左 - 右 - 根)的顺序是先递归遍历左子树,再递归遍历右子树,最后访问根节点。由于该二叉树所有节点的左子树为空,所以后序遍历序列为 G F E D C B A。 ### Python 代码实现 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def buildTree(preorder, inorder): if not preorder or not inorder: return None root_val = preorder[0] root = TreeNode(root_val) inorder_index = inorder.index(root_val) root.left = buildTree(preorder[1:inorder_index + 1], inorder[:inorder_index]) root.right = buildTree(preorder[inorder_index + 1:], inorder[inorder_index + 1:]) return root def postorderTraversal(root): result = [] if root: result += postorderTraversal(root.left) result += postorderTraversal(root.right) result.append(root.val) return result preorder = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] inorder = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] root = buildTree(preorder, inorder) postorder = postorderTraversal(root) print("后序遍历序列:", ' '.join(postorder)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值