zoukankan      html  css  js  c++  java
  • 非递归中序输出二叉搜索树

    代码

    #include
    <iostream>
    using namespace std;

    struct SBtee
    {
    SBtee
    * _p;
    SBtee
    *_l;
    SBtee
    *_r;
    int _data;
    };

    void Print(SBtee * p)
    {
    cout
    <<p->_data<<" ";
    }
    void inorder_tree_walk(SBtee * root)
    {
    SBtee
    * last = (SBtee*)1;
    SBtee
    * p = root;

    while(p)
    {
    if(p->_r == last)
    {
    while (p!=NULL&&p->_r == last)
    //找到该结点的第一个父结点,其中该结点在此父结点的左子树上
    {
    last
    = p;
    p
    =p->_p;
    }
    }
    else if (p->_l==NULL ||
    p
    ->_l==last)
    {
    Print(p);
    last
    = p;
    if (p->_r==NULL)
    {
    p
    =p->_p;
    }
    else
    {
    p
    =p->_r;
    }
    }
    else
    {
    p
    = p->_l;
    }
    }
    }

    int main(int argc, char* argv[])
    {
    SBtee
    * pRoot = new SBtee;
    pRoot
    ->_data = 150;
    pRoot
    ->_p =NULL;

    SBtee
    * p;
    pRoot
    ->_l = new SBtee;
    pRoot
    ->_l->_data =60;
    p
    = pRoot->_r = new SBtee;
    pRoot
    ->_r->_data =180;

    pRoot
    ->_r->_p = pRoot->_l->_p = pRoot;

    p
    ->_l = new SBtee;
    p
    ->_l->_data =170;
    p
    ->_l->_l = p->_l->_r = NULL;

    p
    ->_r = new SBtee;
    p
    ->_r->_data =200;
    p
    ->_r->_l = p->_r->_r = NULL;

    p
    ->_l->_p =p->_r->_p=p;



    p
    = pRoot->_l;
    p
    ->_l = new SBtee;
    p
    ->_l->_data = 30;

    p
    ->_r=new SBtee;
    p
    ->_r->_data =70;

    p
    ->_l->_p =p->_r->_p=p;



    SBtee
    * p3 =p->_l;
    SBtee
    * p7 =p->_r;

    p3
    ->_l = new SBtee;
    p3
    ->_l->_data=20;
    p3
    ->_l->_l=p3->_l->_r =NULL;
    p3
    ->_r = new SBtee;
    p3
    ->_r->_data=40;
    p3
    ->_r->_l=p3->_r->_r =NULL;

    p3
    ->_l->_p = p3->_r->_p = p3;

    p7
    ->_l=NULL;
    SBtee
    * p13 = p7->_r = new SBtee;
    p7
    ->_r->_data =130;

    p7
    ->_r->_p=p7;

    p13
    ->_l = new SBtee;
    p13
    ->_l->_data =90;
    p13
    ->_l->_l= p13->_l->_r = NULL;

    p13
    ->_r = new SBtee;
    p13
    ->_r->_data =131;
    p13
    ->_r->_l =NULL;

    p13
    ->_l->_p = p13->_r->_p = p13;

    p
    = p13->_r->_r= new SBtee;
    p
    ->_data =132;
    p
    ->_l = p->_r = NULL;

    p
    ->_p = p13->_r;

    pRoot
    ->_r= NULL;
    inorder_tree_walk(pRoot);

    return 0;
    }
  • 相关阅读:
    网页定位导航
    position元素的定位
    节点属性
    css控制换行,断词
    css隐藏多余文字显示...
    重绘和回流
    CSS属性书写顺序
    模拟select
    常用html标签
    clientHeight、scrollHeight和offsetHeight基本用法
  • 原文地址:https://www.cnblogs.com/SammyLan/p/1880033.html
Copyright © 2011-2022 走看看