• 二叉树前序遍历


    #include <iostream>
    #include <vector>
    #include <stack>
    
    struct BinaryTreeNode{
        int val;
        BinaryTreeNode* left;
        BinaryTreeNode* right;
        BinaryTreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    };
    
    //递归法
    void traveral(BinaryTreeNode*cur, std::vector<int>&nums)
    {
        if (cur == nullptr)
        {
            std::cout << "cur is null" << std::endl;
            return;
        }
        else{
            std::cout << "cur node: " << cur->val << ", ";
            nums.push_back(cur->val);
            std::cout << "traveral left" << ", ";
            traveral(cur->left, nums);
            std::cout << "traveral right" << ", ";
            traveral(cur->right, nums);
        }
    }
    
    
    std::vector<int> PreorderTraversalRecursion(BinaryTreeNode* root)
    {
        std::vector<int> result;
        traveral(root, result);
        return result;
    }
    
    //迭代法
    std::vector<int> PreorderTraversalIterator(BinaryTreeNode* root)
    {
        std::stack<BinaryTreeNode*> st;
        std::vector<int> result;
        if (root == nullptr)
        {
            return result;
        }
    
        st.push(root);//root进栈
        while (!st.empty())
        {
            BinaryTreeNode* node = st.top();//
    
            st.pop();//弹出
            result.push_back(node->val);//当前节点值
            if (node->right)
            {
                st.push(node->right);//右节点
            }
            if (node->left)
            {
                st.push(node->left);//左节点
            }
        }
        return result;
    }
    
    int main()
    {
        BinaryTreeNode *nodeOne = new BinaryTreeNode(1);
        BinaryTreeNode *nodeTwo = new BinaryTreeNode(2);
        BinaryTreeNode*nodeThree = new BinaryTreeNode(3);
        BinaryTreeNode*nodeFour = new BinaryTreeNode(4);
        BinaryTreeNode*nodeFive = new BinaryTreeNode(5);
        BinaryTreeNode*nodeSix = new BinaryTreeNode(6);
    
        //       1
       //      2   3
      //      4 5
     //          6
    //1-2-4-5-6-3
        nodeOne->left = nodeTwo;
        nodeOne->right = nodeThree;
    
        nodeTwo->left = nodeFour;
        nodeTwo->right = nodeFive;
    
        nodeFive->right = nodeSix;
    
        std::vector<int>resultsRecursion;
        resultsRecursion = PreorderTraversalRecursion(nodeOne);
        for (std::vector<int>::iterator it = resultsRecursion.begin(); it != resultsRecursion.end(); it++)
        {
            std::cout << (*it) << ", ";
        }
    
        std::cout << std::endl<< "-------------------------------------" << std::endl;
        std::vector<int>resultsIteration;
        resultsIteration = PreorderTraversalIterator(nodeOne);
        for (std::vector<int>::iterator it = resultsIteration.begin(); it != resultsIteration.end(); it++)
        {
            std::cout << (*it) << ", ";
        }
    }
  • 相关阅读:
    activemq 高可用集群部署
    rabbitmq单机部署、集群部署、haproxy+keepalived 的高可用负载均衡环境搭建
    redis 单机部署、集群部署(主从同步+哨兵)
    zookeeper 单机部署、伪集群部署、集群部署
    IDEA 中调试 dubbo 出现 <dubbo:reference interface="" /> interface not allow null! 异常
    centos 安装 subversion1.8及更高版本
    mysql 两主一从环境搭建
    mysql 一主多从环境搭建
    springboot + post 中文乱码
    android:inputType参数类型说明
  • 原文地址:https://www.cnblogs.com/crazybird123/p/14873531.html
Copyright © 2020-2023  润新知