⭐算法OJ⭐二叉树的中序遍历【树的遍历】(C++实现)Binary Tree Inorder Traversal
Given the root
of a binary tree, return the preorder traversal of its nodes’ values.
Example 1:
Input: root = [1,null,2,3]
Output: [1,2,3]
Explanation:
Example 2:
Input: root = [1,2,3,4,5,null,8,null,null,6,7,9]
Output: [1,2,4,5,6,7,3,8,9]
Explanation:
Example 3:
Input: root = []
Output: []
Example 4:
Input: root = [1]
Output: [1]
// 定义二叉树节点结构
struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
递归解法
- 前序遍历的顺序是: 根节点 → 左子树 → 右子树 根节点 \rightarrow 左子树 \rightarrow 右子树 根节点→左子树→右子树。
- 使用递归实现。
#include <vector>
using namespace std;// 递归前序遍历函数
void preorderTraversalHelper(TreeNode* root, vector<int>& result) {if (root == NULL) {return;}// 访问根节点result.push_back(root->val);// 递归遍历左子树preorderTraversalHelper(root->left, result);// 递归遍历右子树preorderTraversalHelper(root->right, result);
}// 前序遍历主函数
vector<int> preorderTraversal(TreeNode* root) {vector<int> result;preorderTraversalHelper(root, result);return result;
}
迭代解法(使用栈)
使用 栈 来模拟递归过程。以下是迭代方法的实现:
#include <vector>
#include <stack>
using namespace std;// 迭代前序遍历函数
vector<int> preorderTraversal(TreeNode* root) {vector<int> result;if (root == NULL) {return result;}stack<TreeNode*> stack;stack.push(root);while (!stack.empty()) {TreeNode* node = stack.top();stack.pop();result.push_back(node->val);// 先将右子节点压栈,再压左子节点if (node->right != NULL) {stack.push(node->right);}if (node->left != NULL) {stack.push(node->left);}}return result;
}