博客
关于我
Leedcode6-binary-tree-preorder-traversal
阅读量:794 次
发布时间:2023-01-30

本文共 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); } }};

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

转载地址:http://zxgyk.baihongyu.com/

你可能感兴趣的文章
leetcode第40题:组合总和II
查看>>
leetcode算法题解(Java版)-6-链表,字符串
查看>>
LeetCode经典——202.快慢指针之快乐数
查看>>
LeetCode经典——70.爬楼梯&&509.斐波拉契数列
查看>>
Leetcode经典系列——LRU最近最少使用机制
查看>>
LeetCode美团专场——第203场周赛题解
查看>>
LeetCode蔚来专场——第208场周赛题解
查看>>
leetcode题解-买卖股票的最佳时机
查看>>
leetcode题解102-二叉树的层序遍历
查看>>
leetcode题解102-翻转二叉树
查看>>
leetcode题解104- 二叉树的最大深度
查看>>
leetcode题解108-将有序数组转换为二叉排序树
查看>>
leetcode题解118-杨辉三角
查看>>
leetcode题解131-分割回文串
查看>>
leetcode题解132-分割回文串 II
查看>>
leetcode题解136-只出现一次的数字
查看>>
leetcode题解14-最长公共前缀
查看>>
leetcode题解15-三数之和(双指针经典)
查看>>
leetcode题解151-翻转字符串里的单词
查看>>
leetcode题解153-寻找旋转排序数组的最小值
查看>>