采用二叉链表构造二叉树并对二叉树进行前序、中序、后序遍历

采用二叉链表的方式进行存储构造一个二叉树类,实现以下算法:

1.创建二叉树    2.对二叉树进行前序、中序、后序遍历

 

输入

扩展的前序序列.在一棵树处理结束后,根据响应判断是否处理下一棵树

 

输出

前序、中序、后序

 

样例输入

ab##c##
Y
abc####
N

样例输出

abc
bac
bca
abc
cba
cba

 

代码:

#include<iostream>
using namespace std;

template<class T>
struct binode
{
    T data;
    binode<T> * lchild,* rchild;
};

template<class T>
class bitree
{
    private:
        binode<T> * root;
        binode<T> * creat(binode<T> *bt);
        void release(binode<T> *bt);
        void preorder(binode<T> *bt);
        void inorder(binode<T> *bt);
        void postorder(binode<T> *bt);
    public:
        bitree(){root=creat(root);}
        ~bitree(){release(root);}
        void preorder(){p
建立二叉树实现三种遍历时,我们通常会先定义一个二叉链表节点结构,然后构造二叉树分别编写前序、中后序遍历的递归函数。对于负数节点修改为正数,可以在遍历过程中行判断更新。 首先,创建一个二叉链表节点的结构: ```python class Node: def __init__(self, value): self.value = value self.left = None self.right = None ``` 接着,我们可以分别定义前序(根-左-右)、中(左-根-右)和后序(左-右-根)遍历函数: ```python def pre_order_traversal(node): if node is not None: # 遍历根节点 print(node.value if node.value > 0 else -node.value) # 对左右子节点行前遍历 pre_order_traversal(node.left) pre_order_traversal(node.right) def in_order_traversal(node): if node is not None: # 对左子节点行中遍历 in_order_traversal(node.left) # 遍历根节点 print(node.value if node.value > 0 else -node.value) # 对右子节点行中遍历 in_order_traversal(node.right) def post_order_traversal(node): if node is not None: # 对左子节点和右子节点后序遍历 post_order_traversal(node.left) post_order_traversal(node.right) # 遍历根节点 print(node.value if node.value > 0 else -node.value) ``` 最后,在构建二叉树的过程中,当遇到负数节点时,可以直接将它的value设置为正值: ```python # 假设我们有如下的二叉树构建过程 def build_binary_tree(values): root = Node(values[0]) for value in values[1:]: insert_node(root, value) # 自定义插入负数节点的方法 return root def insert_node(node, value): if value < 0: value = -value # 将负数转换为正数 if value < node.value: if node.left is None: node.left = Node(value) else: insert_node(node.left, value) else: if node.right is None: node.right = Node(value) else: insert_node(node.right, value) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值