算法--解决二叉树遍历问题

第一 实现树的结构

class Node():

构造函数,初始化节点对象,包含数据和左右子节点

def init(self, data=None):

self.data = data # 节点存储的数据

self.left = None # 左子节点,默认为None

self.right = None # 右子节点,默认为None

设置节点数据的方法

def set_data(self, data):

self.data = data # 将传入的数据赋值给节点的data属性

获取节点数据的方法

def get_data(self):

return self.data # 返回节点的data属性

设置左子节点的方法

def set_left(self, node):

self.left = node # 将传入的节点赋值给当前节点的left属性

获取左子节点的方法

def get_left(self):

return self.left # 返回当前节点的left属性,即左子节点

设置右子节点的方法

def set_right(self, node):

self.right = node # 将传入的节点赋值给当前节点的right属性

获取右子节点的方法

def get_right(self):

return self.right # 返回当前节点的right属性,即右子节点

if name == 'main':

创建根节点,数据为'a'

root_node = Node('a')

创建左子节点,数据为'b'

left_node = Node('b')

创建右子节点,数据为'c'

right_node = Node('c')

将左子节点设置到根节点的左子节点位置

root_node.set_left(left_node)

将右子节点设置到根节点的右子节点位置

root_node.set_right(right_node)

打印根节点的数据,左子节点的数据和右子节点的数据

print(root_node.get_data(), root_node.get_left().data, root_node.get_right().data)

第二 二叉树递归遍历

复制代码
#实现树的递归遍历(前、中、后以及层次的遍历),首先定义实现树结构的类Node。编写三个函数proorderO)、posorder0)和mid order0)分别实现先序遍历后序遍历和中序遍历。

from collections import deque

class Node():
    # 构造函数,初始化节点对象,包含数据和左右子节点
    def __init__(self, data=None, left=None, right=None):
        self.data = data  # 节点存储的数据
        self.left = left  # 左子节点,默认为None
        self.right = right  # 右子节点,默认为None

    # 前序遍历:先访问根节点,然后递归遍历左子树,最后递归遍历右子树
    def pro_order(self):
        print(self.data)  # 访问根节点
        if self.left:  # 如果存在左子节点,则递归遍历左子树
            self.left.pro_order()
        if self.right:  # 如果存在右子节点,则递归遍历右子树
            self.right.pro_order()

    # 中序遍历:先递归遍历左子树,然后访问根节点,最后递归遍历右子树
    def mid_order(self):
        if self.left:  # 如果存在左子节点,则递归遍历左子树
            self.left.mid_order()
        print(self.data)  # 访问根节点
        if self.right:  # 如果存在右子节点,则递归遍历右子树
            self.right.mid_order()

    # 后序遍历:先递归遍历左子树,然后递归遍历右子树,最后访问根节点
    def pos_order(self):
        if self.left:  # 如果存在左子节点,则递归遍历左子树
            self.left.pos_order()
        if self.right:  # 如果存在右子节点,则递归遍历右子树
            self.right.pos_order()
        print(self.data)  # 访问根节点

    # 层序遍历:使用队列按层次顺序访问节点
    def row_order(self):
        queue = deque([self])  # 初始化队列,将根节点加入队列
        while queue:  # 当队列不为空时,进行遍历
            current_tree = queue.popleft()  # 从队列前端取出节点
            print(current_tree.data)  # 访问节点
            if current_tree.left is not None:  # 如果存在左子节点,则加入队列
                queue.append(current_tree.left)
            if current_tree.right is not None:  # 如果存在右子节点,则加入队列
                queue.append(current_tree.right)

    # 自定义遍历:使用栈按特定顺序访问节点
    def custom_order(self):
        stack = [self]  # 初始化栈,将根节点加入栈
        while stack:  # 当栈不为空时,进行遍历
            node = stack.pop()  # 从栈末端取出节点
            print(node.data)  # 访问节点
            if node.right is not None:  # 如果存在右子节点,则加入栈
                stack.append(node.right)
            if node.left is not None:  # 如果存在左子节点,则加入栈
                stack.append(node.left)

# 主程序入口
if __name__ == '__main__':
    # 创建二叉树
    tree = Node('A', Node('B', Node('D'), Node('E')), Node('C', Node('F'), Node('G')))
    print("自定义遍历:")
    tree.custom_order()  # 执行自定义遍历

返回结果:

第一

第二

相关推荐
南东山人2 分钟前
一文说清C++类型转换操作符(cast operator)
开发语言·c++
恒风52123 分钟前
PyCharm 中的【控制台】和【终端】的区别
ide·python·pycharm
JavaPub-rodert5 分钟前
Windows系统下载、安装和配置Python环境变量 --- 《跟着小王学Python》
开发语言·windows·python
南宫生7 分钟前
力扣-Hot100-二叉树其一【算法学习day.32】
数据结构·学习·算法·leetcode
Darkwanderor9 分钟前
插入排序——希尔排序
c语言·算法·排序算法·希尔排序
Asa1213811 分钟前
R绘制像素风图片
开发语言·r语言
ooyyaa656125 分钟前
sslSocketFactory not supported on JDK 9+
java·开发语言
decode1235 分钟前
代码随想录算法训练营第三十八天 | 322.零钱兑换 279.完全平方数 139.单词拆分 多重背包以及背包总结
算法
vampire-wpre37 分钟前
我要成为算法高手-二分查找篇
算法
沐泽Mu40 分钟前
嵌入式学习-C嘎嘎-Day04
c语言·开发语言·c++·学习