Binary Tree Preorder Traversal

来源:互联网 发布:淘宝美工怎么接私活 编辑:程序博客网 时间:2024/05/16 09:07

Description:

Given a binary tree, return the preorder traversal of its nodes’ values.
For example: Given binary tree {1,#,2,3},

这里写图片描述

return [1,2,3].
Note: Recursive solution is trivial, could you do it iteratively?

分析:
用栈遍历

代码:

#include <iostream>#include <stack>#include <vector>#define Elementype charusing namespace std;typedef struct TreeNode //树结点{    Elementype  val;    TreeNode *left;    TreeNode *right;    TreeNode(Elementype x) : val(x), left(nullptr), right(nullptr) {}} *Tree;int index = 0;  //全局索引变量//使用先序遍历创建创建二叉树//左子树或右子树不存在用"#"表示void MakeBinaryTree(Tree &T, Elementype value[]){    Elementype c = value[index++];    if (c == '#')        T = nullptr;    else    {        T = new TreeNode(c);        MakeBinaryTree(T->left, value);        MakeBinaryTree(T->right, value);    }}//先序递归遍历/*void  BinaryTreepreorderTraversal(Tree root){if (root){cout<<root->val<<" ";BinaryTreepreorderTraversal(root->left);BinaryTreepreorderTraversal(root->right);}}*///非递归先序遍历//使用栈,每访问一个结点,出栈,左右结点入栈vector<Elementype>  BinaryTreepreorderTraversal(Tree root){    vector<Elementype> result;    stack<Tree> sk;    Tree p = root;    if (p != nullptr)        sk.push(p);    while (!sk.empty())    {        p = sk.top();        sk.pop();        result.push_back(p->val);        if (p->right != nullptr)            sk.push(p->right);        if (p->left != nullptr)            sk.push(p->left);    }    return result;}int main(){    Tree T = nullptr;    Elementype data[7] = {'1','#','2','3','#','#','#'}; //注意,每个结点都要有值    vector<Elementype> result;    MakeBinaryTree(T, data);    result = BinaryTreepreorderTraversal(T);    for (auto &s : result)        cout << s << " ";    cout << endl;    system("pause");    return 0;}

测试:

这里写图片描述

0 0