zoukankan      html  css  js  c++  java
  • 二叉树

    构建二叉树:

    增加节点:

    删除节点:

    查询节点:

    1.先序遍历

    /* 递归版前序遍历 */
    void Tree::preOrderWithRecursive(ListNode* root) {
        if (root == nullptr)return;
        std::cout << root->val << " ";
        preOrderNoRecursive(root->left);
        preOrderNoRecursive(root->right);
    }
    
    /* 非递归版前序遍历 */
        vector<int> preorderTraversal(TreeNode* root) {
            vector<int> res;
            stack<TreeNode*> s;
            s.push(root);
            while(!s.empty())
            {
                TreeNode* p = s.top();
                s.pop();
                if (p == nullptr)continue;
                res.push_back(p->val);
                s.push(p->right);
                s.push(p->left);
            }
            return res;
        }

    2. 后序遍历

    前序为 root->left->right, 后序为left->right->root

    可以将前序改为root->right->left,然后进行一次翻转就是left->right->root

    /* 递归版后序遍历 */
    void Tree::postOrderWithRecursive(ListNode* root) {
        if (root == nullptr)return;
        postOrderNoRecursive(root->left);
        postOrderNoRecursive(root->right);
        std::cout << root->val << " ";
    }
    /* 非递归版后序遍历 */
        vector<int> postorderTraversal(TreeNode* root) {
            vector<int> res;
            stack<TreeNode*> s;
            s.push(root);
            while(!s.empty())
            {
                root = s.top();
                s.pop();
                if (root == nullptr)continue;
                res.push_back(root->val);
                s.push(root->left);
                s.push(root->right);
            }
            reverse(res.begin(), res.end());
            return res;
        }

    3. 中序遍历

    /* 递归版中序遍历 */
    void Tree::inOrderWithRecursive(ListNode* root) {
        if (root == nullptr)return;
        inOrderNoRecursive(root->left);
        std::cout << root->val << " ";
        inOrderNoRecursive(root->right);
    }
    
    /* 非递归版中序遍历 */
    vector<int> inorderTraversal(TreeNode* root) {
            vector<int> res;
            stack<TreeNode*> s;
            TreeNode* p = root;
            while(p || !s.empty())
            {
                while(p)
                {
                    s.push(p);
                    p = p->left;
                }
                p = s.top();
                s.pop();
                res.push_back(p->val);
                p = p->right;
            }
            return res;
        }
  • 相关阅读:
    Asp.Net MVC 路由
    Http 请求处理流程
    Http Module 介绍
    彻底屏蔽鼠标右键、另存为、查看源文件
    使用TransactionScope实现单数据库连接事务操作
    Asp.Net MVC(创建一个任务列表应用程序) Part.1
    Http Handler 介绍
    jQuery.API源码深入剖析以及应用实现(1) - 核心函数篇
    安装MSSQL2008出现的问题记录
    SQL – 8.Union
  • 原文地址:https://www.cnblogs.com/qiang-wei/p/12301450.html
Copyright © 2011-2022 走看看