码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树遍历

时间:2014-12-12 01:15:30      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   color   os   sp   on   div   log   

 

1.首先是二叉树的建立

先序递归建立一个 建立一个二叉树 用#表示空

void CreatTree(BitNode **root)
{
    char ch;
    scanf("\n%c",&ch);
    if(ch == #)
        *root = NULL;
    else
    {
        *root = (BitNode *)malloc(sizeof(BitNode));
        (*root)->data = ch;
        printf("%cleft child:",ch);
        CreatTree(&(*root)->lchild);
        printf("%cright child:",ch);
        CreatTree(&(*root)->rchild);
    }
}

 

2. 运用递归的思想遍历二叉树, 这种方法最为简单。 

void PreOrder(BitNode *root)
{
    if(root == NULL)
    {
        return;
    }
    printf("%c ",root->data);
    PreOrder(root->lchild);
PreOrder(root->rchild); }

3.借助栈 可以实现非递归方法

 

思路: 按照我们的遍历方法走二叉树

1)  一直向左 (至叶子节点-> 左右都是NULL)

2) 弹栈 回退一个节点 向右走一步后继续  ( 再重复 1~2 步骤至栈空)

 

 

 

//前序非递归
void PreOrder_Nonrecrusive(pBittree T) { if(!T) return ; stack<pBittree> s; pBittree p= T; while(p != NULL || !s.empty()) { while(p != NULL) { cout << p->data << " "; s.push(p); p = p-> lchild; } if(!s.empty()) { p = s.top(); s.pop(); p = p->rchild; } } }

 

 

后续非递归: 

遍历过程相似:

因为后续非递归方法是先访问左子树,再访问右子树,最后访问根节点,用栈储存时必须分清反悔跟节点是做还是右,所以需要一个辅助指针r;指向其最近访问节点。 也可增加一个标识域;

void PostOrder_Nonrecresive(pBittree T)
{
    stack<pBittree> s;
    pBittree p = T, r = NULL, temp;
    while(p || !s.empty())
    {
        if(p)
        {
            s.push(p);
            p = p->lchild;
        }
        else
        {
            p = s.top();
            if(p->rchild && p->rchild != r )
            {
                p = p->rchild;
                s.push(p);
                p = p->lchild;
            }
            else
            {
                p = s.top();
                s.pop();
                cout << p->data << " ";
                r = p;
                p = NULL;
            }
        } //else
    }  //while
}

  

二叉树遍历

标签:style   blog   ar   color   os   sp   on   div   log   

原文地址:http://www.cnblogs.com/yvesfan/p/4158849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!