二叉树中序遍历非递归

//二叉树中序遍历非递归算法

#include <iostream>
#include<stack>
using namespace std;
struct BinaryNode {
    int val;
    BinaryNode* lchild;
    BinaryNode* rchild;
};

void DFSmid(BinaryNode* root)
{
    //空树
    if (root == NULL)
        return;
    stack< BinaryNode*> s;
    while (root != NULL || !s.empty())
    {
        if(root != NULL)
        {
            s.push(root);
            root = root->lchild;
        }
        else
        {
            root = s.top();//弹出栈顶元素
            s.pop();
            cout << root->val << ' ';
            root = root->rchild;
        }
    }
}

void recursionPre(BinaryNode *root)
{
    if (root == NULL) return;
    recursionPre(root->lchild);
    cout << root->val;
    recursionPre(root->rchild);
}
void createBinaryTree()
{
    //创建节点
    BinaryNode node1 = { 1,NULL,NULL };
    BinaryNode node2 = { 2,NULL,NULL };
    BinaryNode node3 = { 3,NULL,NULL };
    BinaryNode node4 = { 4,NULL,NULL };
    BinaryNode node5 = { 5,NULL,NULL };
    BinaryNode node6 = { 6,NULL,NULL };
    BinaryNode node7 = { 7,NULL,NULL };
    //    BinaryNode node8 = { 'H',NULL,NULL };
        //建立结点关系
    node1.lchild = &node2;
    node1.rchild = &node3;
    node2.lchild = &node4;
    node2.rchild = &node5;
    node3.lchild = &node6;
    node3.rchild = &node7;

    recursionPre(&node1);
    cout << endl;

    DFSmid(&node1);


}
int main()
{
    createBinaryTree();
    system("pause");
    return 0;
}

全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务