• 二叉树


    构建二叉树:

    增加节点:

    删除节点:

    查询节点:

    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;
        }
  • 相关阅读:
    python3.6下安装wingIDE破解方法
    Python 列表list 和 字符串str 互转
    c# 读取txt文件并分隔
    基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
    Jquery ajax动态更新下拉列表的内容
    vs2015使用技巧-------- 查看类关系图
    Dapper 批量操作sql
    Linq批量建表
    WebRequest的get及post提交
    git -- 常用命令
  • 原文地址:https://www.cnblogs.com/qiang-wei/p/12301450.html
Copyright © 2020-2023  润新知