标签:roo 实现 ret describe 输入 amp 二叉树 private nbsp
题目描述:
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] 1 2 / 3 输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
数据结构定义:
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} };
算法思想:
/*一、递归 效率较低,了解即可。 二叉树的前序遍历规则: 1. 访问根结点; 2. 遍历左子树; 3. 遍历右子树 */ /* Author:Parzulpan Date:2018-11-7 Describe: */ class Solution { private: void rec(TreeNode* root,vector<int> &ret){ if(root != NULL){ ret.push_back(root->val); rec(root->left,ret); rec(root->right,ret); } } public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ret; rec(root,ret); return ret; } };
/* 二、迭代 效率较高,重点掌握。利用栈实现。 */ class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ret; stack<TreeNode*> s; while(root!=NULL){ ret.push_back(root->val); //这是关键 if(root->left != NULL){ //存在左子树 if(root->right != NULL) //存在右子树,将右子树压入栈中 s.push(root->right); root = root->left; //由于存在左子树,不论是否存在右子树,都继续遍历左子树 continue; } if(root->right != NULL){ //不存在左子树,但存在右子树,直接遍历右子树 root = root->right; continue; } if(!s.empty()){ //不存在左子树,且不存在右子树,但栈不为空,即只有一个根节点 root = s.top(); //弹出栈顶元素,继续遍历 s.pop(); continue; } break; } return ret; } };
分析总结:
标签:roo 实现 ret describe 输入 amp 二叉树 private nbsp
原文地址:https://www.cnblogs.com/parzulpan/p/9920764.html