python中怎么分析循环遍历二叉树,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
前序遍历
struct Node
{
Node*left;
Node*right;
int data;
Node(){ func; }
};
Node* create(Node*p, int depth)
{ if (p && depth)
{
p->left = new Node;
p->right = new Node;
p->data = depth;
create(p->left, depth - 1);
create(p->right, depth - 1);
} if (!depth)
{
p->left = nullptr;
p->right = nullptr;
p->data = depth;
} return p;
}
void print1(Node*p)
{ if (p)
{
cout << p->data << " ";
print1(p->left);
print1(p->right);
}
}
void print2(Node*head)//利用stack 模拟函数调用过程 来遍历{
stack<Node* > s;
Node*p = head;
{ while (p)
{
s.push(p);
cout << p->data << " ";
p = p->left;
} while (!s.empty())
{
Node*pp = s.top(); if (pp->right && pp != head)
{
cout << pp->right->data << " ";
}
s.pop();
}
}
{
p = head->right; while (p)
{
s.push(p);
cout << p->data << " ";
p = p->left;
} while (!s.empty())
{
Node*pp = s.top(); if (pp->right
&& pp != head)
{
cout << pp->right->data << " ";
}
s.pop();
}
}
}
int main()
{
Node* head = new Node;
create(head, 2);
head->data = 10;
head->left->data = 6;
head->right->data = 14;
head->left->left->data = 4;
head->left->right->data = 8;
head->right->left->data = 12;
head->right->right->data = 16;
print1(head);//递归遍历
cout << endl;
print2(head);//循环遍历
system("pause"); return 0;
}
中序
void print2(Node*head)
{
stack<Node* > s;
Node*p = head;
{ while (p)
{
s.push(p); // cout << p->data << " ";
p = p->left;
} while (!s.empty())
{
Node*pp = s.top();
cout << pp->data << " "; if (pp->right && pp != head )
{
cout << pp->right->data << " ";
}
s.pop();
}
}
{
p = head->right; while (p)
{
s.push(p);
p = p->left;
} while (!s.empty())
{
Node*pp = s.top();
cout << pp->data << " "; if (pp->right&& pp != head)
{
cout << pp->right->data << " ";
}
s.pop();
}
}
}
后序
void print2(Node*head)
{
stack<Node* > s;
Node*p = head;
{ while (p)
{
s.push(p);
p = p->left;
} while (!s.empty())
{
Node*pp = s.top();
if (pp->right && pp != head )
{
cout << pp->right->data << " ";
}
if ( pp != head)
cout << pp->data << " ";
s.pop();
}
}
{
p = head->right; while (p)
{
s.push(p);
p = p->left;
} while (!s.empty())
{
Node*pp = s.top();
if (pp->right&& pp != head)
{
cout << pp->right->data << " ";
}
cout << pp->data << " ";
s.pop();
}
}
cout << head->data << " ";
}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:http://blog.itpub.net/31557424/viewspace-2218782/