博客
关于我
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/

你可能感兴趣的文章
Kubernetes学习总结(8)—— Kubernetes Pod 资源管理 和 Pod 服务质量
查看>>
Kubernetes学习总结(9)—— 基础架构的未来是 K8s,那么 K8s 的未来在何方?
查看>>
kubernetes实战(十三):k8s使用helm持久化部署harbor集成openLDAP登录
查看>>
Kubernetes实战(一)-Kubernetes集群搭建
查看>>
Kubernetes实战(七)-优先级调度(Pod Priority Preemption)
查看>>
Kubernetes实战(三十一)-Calico网络部署(推荐)
查看>>
Kubernetes实战(三十三)-外部Etcd集群部署与调优(更安全的数据存储策略)
查看>>
Kubernetes实战(三十二)-Kubeadm 安装 Kubernetes v1.24.0
查看>>
Kubernetes实战(三)-定向调度(NodeSelector)
查看>>
Kubernetes实战(二十九)-集群资源管理(CPU & Memory)
查看>>
Kubernetes实战(二十二)-Etcd 集群部署(安全)
查看>>
Kubernetes实战(二十五)-Flannel 网络部署(不推荐,不支持 Etcd3)
查看>>
Kubernetes实战(二十八)-环境共享与隔离(Namespace)
查看>>
Kubernetes实战(十五)-敏感数据管理(Secret)
查看>>
Kubernetes对接Ceph存储实现云原生持久化
查看>>
Kubernetes对象Service详解
查看>>
kubernetes常用工具
查看>>
Kubernetes快速上手:部署、使用及核心概念解析
查看>>
Kubernetes故障排查与面试汇总
查看>>
Kubernetes故障排查实战
查看>>