0
点赞
收藏
分享

微信扫一扫

[二叉树]BM23 二叉树的前序遍历-简单

​​BM23 二叉树的前序遍历​​

知识点​​树​​​​递归​​​​dfs​​​​广度优先搜索(BFS)​​

描述

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。数据范围:二叉树的节点数量满足 [二叉树]BM23 二叉树的前序遍历-简单_非递归 ,二叉树节点的值满足 [二叉树]BM23 二叉树的前序遍历-简单_栈_02 ,树的各节点的值各不相同

示例 1:[二叉树]BM23 二叉树的前序遍历-简单_非递归_03

示例1

输入:

{1,#,2,3}

复制返回值:

[1,2,3]

题解

前序遍历:先访问根节点,再访问左节点,最后再访问右节点。此处提供递归和非递归2个版本的实现。

递归实现

#include <bits/stdc++.h>

struct TreeNode
{
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

void pre_order_r(TreeNode *root, std::vector<int> &v)
{
if (root == nullptr)
{
return;
}
v.push_back(root->val);
pre_order_r(root->left, v);
pre_order_r(root->right, v);
}

class Solution
{
public:
std::vector<int> preorderTraversal_r(TreeNode *root)
{
std::vector<int> v;
pre_order_r(root, v);
return v;
}
};

非递归实现

借助于栈,先将根节点放入栈中,然后访问栈顶元素,如果该元素的右节点不为空则将右节点压栈,如果左节点不为空则将左节点入栈,然后将栈顶元素出栈。重复此过程,直到栈为空。

void pre_order_transfer(TreeNode *root, std::vector<int> &v)
{
if (root == nullptr)
{
return;
}
std::stack<TreeNode *> s;
s.push(root);
while (!s.empty())
{
auto node = s.top();
s.pop();
v.push_back(node->val);
if (node->right != nullptr)
{
s.push(node->right);
}
if (node->left != nullptr)
{
s.push(node->left);
}
}
}
举报

相关推荐

0 条评论