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); } }};

这两种方法各有优缺点。递归方法实现简单易懂,但在大数据量下可能存在性能问题。非递归方法通过栈实现,避免了递归调用的深度限制,是更为稳健的选择。

上一篇:Leedcode7-binary-tree-postorder-traversal
下一篇:Leedcode5-Sort a linked list using insertion sort.

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月24日 22时47分36秒