Binary Tree Preorder Traversal:
Given a binary tree, return the preorder traversal of its nodes’ values.
Example:
Input: [1,null,2,3]
Output: [1,2,3]
Solution:
#include <iostream>
#include <stack>
#include <vector>
#include <string>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
struct Command{
string s;
TreeNode* node;
Command(string s, TreeNode* node): s(s), node(node){}
};
// 先序遍历二叉树的非递归实现
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if ( root == NULL )
return res;
stack<Command> stack;
stack.push( Command("go", root) );
while ( !stack.empty() ){
Command command = stack.top();
stack.pop();
if( command.s == "print" )
res.push_back( command.node -> val );
else{
assert( command.s == "go" );
if( command.node -> right )
stack.push( Command("go", command.node -> right) );
if( command.node -> left )
stack.push( Command("go", command.node -> left) );
stack.push( Command("print", command.node) );
}
}
return res;
}
};
总结: 上述解法是非递归的实现的先序遍历,用了栈的思想,模拟系统栈的工作流程。递归方法简单,就不实现了。