【Rust】二叉树-前序-迭代

环境

  • Time 2022-04-09
  • Rust 1.60.0

前言

说明

基于标准库来学习各种数据结构,并不是从头实现数据结构。

特点

之前使用递归的方式实现了二叉树的前序遍历,这里使用迭代的方式。

示例

节点定义

type NodeRef<T> = Option<Box<Node<T>>>;

struct Node<T: Debug> {
    value: T,
    left: NodeRef<T>,
    right: NodeRef<T>,
}

impl<T: Debug> Node<T> {
    fn new_node_ref(value: T) -> NodeRef<T> {
        Some(Box::new(Node {
            value,
            left: None,
            right: None,
        }))
    }
}

二叉树定义

struct BinaryTree<T: Debug> {
    root: NodeRef<T>,
}

impl<T: Debug> BinaryTree<T> {
    fn pre_order(&self) {
        let mut stack = vec![&self.root];
        while let Some(node) = stack.pop() {
            if let Some(node) = node {
                println!("{:?}", node.value);
                stack.push(&node.right);
                stack.push(&node.left);
            }
        }
    }

    // in_order 
}

前序遍历

fn main() {
    let tree = BinaryTree {
        root: Some(Box::new(Node {
            value: 44,
            left: Some(Box::new(Node {
                value: 22,
                left: Node::new_node_ref(11),
                right: Node::new_node_ref(33),
            })),
            right: Some(Box::new(Node {
                value: 66,
                left: Node::new_node_ref(55),
                right: Node::new_node_ref(77),
            })),
        })),
    };

    tree.pre_order();
}

总结

使用迭代的方式实现了二叉树的前序遍历。

附录

posted @   jiangbo4444  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-06-30 【k8s】Volume-pv-nfs
2021-06-30 【k8s】Volume-persistentVolumeReclaimPolicy
2021-06-30 【k8s】Volume-pv
2021-06-30 【k8s】Secret-生成环境变量
2021-06-30 【k8s】Volume-nfs
2021-06-30 【k8s】Volume-hostPath
2021-06-30 【k8s】Volume-emptyDir
点击右上角即可分享
微信分享提示