• 【Rust】二叉树后续迭代


    环境

    • Time 2022-04-10
    • 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 post_order(&self) {
            let mut stack = vec![&self.root];
            let mut result = vec![];
            while let Some(node) = stack.pop() {
                if let Some(node) = node {
                    result.push(&node.value);
                    stack.push(&node.left);
                    stack.push(&node.right);
                }
            }
            result.iter().rev().for_each(|node| println!("{node:?}",));
        }
    }
    

    后序遍历

    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.post_order();
    }
    

    总结

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

    附录

  • 相关阅读:
    空中楼阁 ( House )最短路
    [hdu4333]Revolving Digits
    vue element-ui el-table 选择框单选修改
    css 中间文字 两边横线
    uni-app计算scroll-view高度
    Swift Playgrounds Mac 编程学习入门
    vuecli vue.config.js 通用配置
    vuecli3 分环境打包的方案
    mysql 插入更新
    关闭进程
  • 原文地址:https://www.cnblogs.com/jiangbo4444/p/16425603.html
Copyright © 2020-2023  润新知