
Leedcode6-binary-tree-preorder-traversal
发布日期:2025-04-04 18:36:37
浏览次数:10
分类:精选文章
本文共 2205 字,大约阅读时间需要 7 分钟。
预序遍历实现 #include#include #include #include using namespace std; // Definition for binary tree 先序遍历 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; #if 0 class Solution { public: vector v; vector res; preorderTraversal(TreeNode *root) { if (root == NULL) return res; res.push_back(root->val); if (root->left != NULL) preorderTraversal(root->left); if (root->right != NULL) preorderTraversal(root->right); return res; } }; #endif #if 0 #endif #if 1 #endif #if 1 #endif
预序遍历实现
预序遍历是一种常见的遍历方式,通常用于遍历二叉树。在本文中,我们将探讨如何实现预序遍历的不同方法。
预序遍历的基本方法是从树的根开始,依次访问根节点,左孩子节点,最后是右孩子节点。以下将详细介绍两种实现方法:递归方法和非递归方法。
递归方法是一个直观且简洁的实现方式。在递归方法中,我们使用递归函数来访问节点。具体步骤如下:
class Solution {public: vector v; vector res; preorderTraversal(TreeNode *root) { if (root == NULL) return res; res.push_back(root->val); if (root->left != NULL) preorderTraversal(root->left); if (root->right != NULL) preorderTraversal(root->right); return res; }};
这种方法通过递归访问左孩子和右孩子节点,直到遇到叶子节点为止。递归实现的代码简洁,但由于递归调用的深度较大,可能会导致栈溢出问题,在处理大的树结构时需要谨慎使用。
非递归方法通过栈来实现预序遍历。栈的使用允许我们在不引入递归调用的情况下,模拟递归的访问顺序。在这种方法中,我们使用一个栈来存储节点,并记录是否已经访问过该节点(通过标志位或复合节点表示)。具体实现步骤如下:
class Solution {public: vector v; stack TreeNode* s; preorderTraversal(TreeNode *root) { if (root == NULL) return v; s.push(root); while (!s.empty()) { TreeNode* node = s.top(); s.pop(); v.push_back(node->val); if (node->right != NULL) s.push(node->right); if (node->left != NULL) s.push(node->left); } }};
这两种方法各有优缺点。递归方法实现简单易懂,但在大数据量下可能存在性能问题。非递归方法通过栈实现,避免了递归调用的深度限制,是更为稳健的选择。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月24日 22时47分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Leedcode3- Max Points on a Line 共线点个数
2025-04-04
Leedcode4-sort listnode 归并排序
2025-04-04
Leedcode6-binary-tree-preorder-traversal
2025-04-04
Leedcode7-binary-tree-postorder-traversal
2025-04-04
Leedcode9-linked-list-cycle-i
2025-04-04
Leetcode - Permutations I,II
2025-04-04
LeetCode 64. 最小路径和(Minimum Path Sum) 20
2025-04-04
LeetCode AutoX 安途智行专场竞赛题解
2025-04-05
LeetCode OJ:Integer to Roman(转换整数到罗马字符)
2025-04-05
LeetCode OJ:Merge k Sorted Lists(归并k个链表)
2025-04-05
leetcode Plus One
2025-04-05
LeetCode shell 题解(全)
2025-04-05
LeetCode Text Justification
2025-04-05
leetcode Valid Parentheses
2025-04-05
Leetcode | Simplify Path
2025-04-05
LeetCode – Refresh – 4sum
2025-04-05
LeetCode – Refresh – Valid Number
2025-04-05
leetcode — edit-distance
2025-04-05
LeetCode 中级 - 有序链表转换二叉搜索树(109)
2025-04-05