Leetcode 144 Binary Tree Preorder Traversal
题目原文
Given a binary tree, return the preorder traversal of its nodes' values.
题意分析
先根次序输出一棵树解法分析
先根次序输出一棵树最常见的办法是采用递归,本题要求利用迭代的方法。要将递归转为迭代,关键是要控制迭代变量,并且注意维护一个stack,用于存储没来的及处理,但需要记录的东西。本题迭代变量可以用root表示,root=root->left,逐渐传递,由于是先根遍历,右孩子在深度优先的时候会被跳过,因此需要用stack记录每一个右孩子,当root->left是空时,就要从stack中pop出最近一个右孩子,作为继续迭代的root,C++代码如下:
/**
* 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> res;
stack<TreeNode*> myStack;
vector<int> preorderTraversal(TreeNode* root) {
while(root!=NULL){
res.push_back(root->val);
if(root->right!=NULL)
myStack.push(root->right);
root=root->left;
if(root==NULL&&!myStack.empty()){
root=myStack.top();
myStack.pop();
}
}
return res;
}
};