数据结构-二叉树

二叉树

知识点

二叉树遍历

  • 前序遍历:根节点->左子树->右子树
  • 中序遍历:左子树->根节点->右子树
  • 后续遍历:左子树->右子树->根节点

注意点:

  • 以根节点的访问顺序,决定是什么遍历
  • 左子树都是优先右子树

前序递归

void preorderHelper(TreeNode* node) {
    if (node == nullptr) return;
    result.push_back(node->val);
    preorderHelper(node->left);
    preorderHelper(node->right);
}

前序非递归

// 通过非递归遍历
template<class TreeNode>
vector<int> preorderTraversal(TreeNode* root) {
    vector<int> res;  // 保存结果
    stack<TreeNode*> call;  //调用栈,最后出栈就是前面的部分结果
    if (root != nullptr) {
        call.push(root);
    }
    while (!call.empty())
    {
        TreeNode* t = call.top();
        call.pop();   // 返回的是void
        if (t!=nullptr)
        {
            if (t->right) call.push(t->right);  // 右节点压栈,最后处理
            if (t->left) call.push(t->left);
            call.push(t); 
            call.push(nullptr);
        }
        else
        {
            res.push_back(call.top()->val); //top()是nullptr之前压栈的一个节点,也就是上面call.push(t)中的那个t
            call.pop();
        }
    }
    return res;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容