1. 程式人生 > >LeetCode144. 二叉樹的前序遍歷(Binary Tree Preorder Traversal)

LeetCode144. 二叉樹的前序遍歷(Binary Tree Preorder Traversal)

題目描述

給定一個二叉樹,返回它的 前序 遍歷。
示例:

輸入: [1,null,2,3]  
   1
    \
     2
    /
   3 

輸出: [1,2,3]

進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

遞迴程式碼:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution { public: vector<int> result; vector<int> preorderTraversal(TreeNode* root) { if(root){ result.push_back(root->val); preorderTraversal(root->left); preorderTraversal(root->right); } return result;
} };

非遞迴程式碼:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> res; stack<TreeNode*> s; //TreeNode *p=root; while(root||!s.empty()){ if(root){ s.push(root); res.push_back(root->val); root=root->left; } else{ root=s.top(); s.pop(); root=root->right; } } return res; } };