Binary Tree Inorder Traversal

来源:互联网 发布:旅行者1号 知乎 编辑:程序博客网 时间:2024/05/17 05:18

Description:

Given a binary tree, return the inorder traversal of its nodes’ values.
For example: Given binary tree {1,#,2,3},
这里写图片描述
return [1,3,2].
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);    }}//非递归先序遍历//使用栈,每访问一个结点,直到其左右结点都访问完之后才出栈vector<Elementype>  BinaryTreeinorderTraversal(Tree root){    vector<Elementype> result;    stack<Tree> sk;    Tree p = root;    while (!sk.empty() || p != nullptr)    {        if (p != nullptr)        {            sk.push(p);            p = p->left;        }        else        {            p = sk.top();            sk.pop();            result.push_back(p->val);            p = p->right;        }    }    return result;}int main(){    Tree T = nullptr;    Elementype data[7] = {'1','#','2','3','#','#','#'}; //注意,每个结点都要有值    vector<Elementype> result;    MakeBinaryTree(T, data);    result = BinaryTreeinorderTraversal(T);    for (auto &s : result)        cout << s << " ";    cout << endl;    system("pause");    return 0;}

测试:

这里写图片描述

0 0
原创粉丝点击