qinzuoyan

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  8 Posts :: 0 Stories :: 16 Comments :: 0 Trackbacks

常用链接

留言簿(3)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

使用非递归后续遍历:
#include<iostream>
#include
<stack>
#include
<map>
using namespace std;

struct Node
{
    
int v;
    Node 
*lchild;
    Node 
*rchild;
};

struct StackNode
{
    Node 
*ptr;
    
int flag;
};

int maxDepth(Node *root)
{
    stack
<StackNode> s;
    StackNode x;
    Node 
*= root;
    
int max = 0;
    
while (p || !s.empty())
    {
        
while (p)
        {
            x.ptr 
= p;
            x.flag 
= 0;
            s.push(x);
            
if (s.size() > max)
                max 
= s.size();
            p 
= p->lchild;
        }
        
while (!s.empty() && s.top().flag)
        {
            s.pop();

        }
        
if (!s.empty())
        {
            s.top().flag 
= 1;
            p 
= s.top().ptr->rchild;
        }
    }
    
return max;
}


int main()
{
    
int i, j;
    map
<int, Node*> m;

    
int a[][3= {
        {
1,2,3},
        {
2,4,5},
        {
3,6,7},
        {
4,-1,-1},
        {
5,-1,-1},
        {
6,8,-1},
        {
7,-1,9},
        {
8,-1,-1},
        {
9,-1,10},
        {
10,-1,-1},
        
-1
    };

    
for (i=0; a[i][0]!=-1; i++) {
        Node 
*= new Node;
        n
->= a[i][0];
        m[n
->v] = n;
    }
    
for (i=0; a[i][0]!=-1; i++) {
        
int s = a[i][0];
        
int l = a[i][1];

        
int r = a[i][2];
        Node 
*= m[s];
        n
->lchild = (l==-1 ? NULL : m[l]);
        n
->rchild = (r==-1 ? NULL : m[r]);
    }

    Node 
*root = m[a[0][0]];

    cout 
<< maxDepth(root) << endl;

    
return 0;
}

posted on 2010-10-22 14:16 左言 阅读(539) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理