(java)关于用括号表示法直接创建二叉树的算法

本文介绍了如何通过二叉树的括号表示法(如A(B(DE(H))C(FG)))高效地构建二叉树。提出了一种算法,首先将根节点(例如A)入栈,然后遍历字符串,遇到左括号入栈,遇到字母则封装为节点入栈,遇到右括号时弹出栈中节点构建二叉树结构。该方法能有效提高构建二叉树的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有的时候 我们会得到一个二叉树的括号表示法(以字母为例)

例如 A(B(DE(H))C(FG))

如何通过这个括号表示法构造出二叉树?

若是一个一个加入左 或者右边 效率不佳 我设计了一个算法 可以自动把 二叉树的字母表示变成一个二叉树(仍是以字母为例)

思路

1.创建出一Object对象

2.先把括号表示法 A(B(DE(H))C(FG))    第一个节点(这里为A)单独拿出来作为根节点 入栈

3.扫描给的String(    A(B(DE(H))C(FG))   )

4.如果是左括号  直接入栈

5.如果是一个字母 那么封装成一个节点 再入栈

6.如果是右括号 不入栈 弹出栈前面至多两个节点 弹出左括号 把一个或者两个节点分别赋给左括号前面的节点(默认只有一个节点时优先挂在右节点)

7.3到6循环 知道扫描到括号表示法尾部

8.返回根节点

详细代码如下

public static Node creatbt(String s){
        Stack<Object> stack = new Stack<Object>();  //用栈来存储数据
        Node root = null;
        int i = 1;                     
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值