首页 > 其他 > 详细

【数据结构】二叉树遍历

时间:2014-05-17 21:57:08      阅读:245      评论:0      收藏:0      [点我收藏+]

先序遍历和中序遍历非递归代码:

bubuko.com,布布扣
#include <iostream>
#include <vector>
using namespace std;

typedef struct BinaryTree 
{
    int data;
    struct BinaryTree *rchild, *lchild;
}BinaryTree;

int createBinaryTree( BinaryTree * &T)  //必须用引用 因为内存是在函数里面分配的
{
        int ch;
        scanf("%d", &ch);

        if(ch != 0)
        {
            T = (BinaryTree *)malloc(sizeof(BinaryTree));
            T->data = ch;
            createBinaryTree(T->lchild);
            createBinaryTree(T->rchild);
        }
        else
        {
            T = NULL;
        }
    return 0;
}

int visit(int data)
{
    printf("%d ", data);
    return 0;
}


int PreOrderTraverse(BinaryTree T) //先序遍历  
{
    BinaryTree* p;
    vector<BinaryTree *> Stack;
    Stack.push_back(&T);
    while(!Stack.empty())
    {
        while((p = Stack.back()) != NULL) 
        {
            visit(p->data);
            Stack.push_back(p->lchild);
        }
        Stack.pop_back();
        if(!Stack.empty())
        {
            p = Stack.back(); 
            Stack.pop_back();
            Stack.push_back(p->rchild);
        }
    }
    return 0;
}


int InOrderTraverse(BinaryTree T) //中序遍历
{
    BinaryTree* p;
    vector<BinaryTree *> Stack;
    Stack.push_back(&T);
    while(!Stack.empty())
    {
        while((p = Stack.back()) != NULL) 
            Stack.push_back(p->lchild);
        Stack.pop_back();
        if(!Stack.empty())
        {
            p = Stack.back(); 
            Stack.pop_back();
            visit(p->data);
            Stack.push_back(p->rchild);
        }

    }
    return 0;
}

int main()
{
    BinaryTree * T = NULL;
    createBinaryTree(T);
    PreOrderTraverse(*T);
    InOrderTraverse(*T);
    return 0;
}
bubuko.com,布布扣

注意理清楚弹栈的机制。

【数据结构】二叉树遍历,布布扣,bubuko.com

【数据结构】二叉树遍历

原文:http://www.cnblogs.com/dplearning/p/3732745.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!