m********f 发帖数: 238 | 1 一个二叉树,请按照“之”字型打印输出。
例如,二叉树如下
1
/ \
2 3
/ \ / \
4 5 6 7
/\ / \ / \ / \
8 9 10 11 12 13 14 15
输出顺序为:
1 2 3 7 6 5 4 8 9 10 11 12 13 14 15
如果要求按照这个顺序存成链表,又如何解答? |
l****c 发帖数: 782 | |
m******t 发帖数: 4077 | 3 stack, queue, stack, queue...
【在 m********f 的大作中提到】 : 一个二叉树,请按照“之”字型打印输出。 : 例如,二叉树如下 : 1 : / \ : 2 3 : / \ / \ : 4 5 6 7 : /\ / \ / \ / \ : 8 9 10 11 12 13 14 15 : 输出顺序为:
|
b******g 发帖数: 77 | 4 #include
#include
void printZ(Node * root)
{
bool l2r = true;
stack S1, S2;
stack S1.push(root);
Node * node;
while ( !S1.empty() || !S2.empty())
{
if (l2r)
{
while ( !S1.empty())
{
v = S1.top();
S1.pop();
cout << node->value;
if (node -> left != NULL)
S2.push(node -> left);
if (node -> left != NULL)
S2.push(node -> right);
}
else
{
while (!S2.empty())
{
v = S2.top();
S2.pop();
cout << node -> value;
if (node -> right != NULL)
S1.push(node -> right);
if (node -> left != NULL)
S1.push(node -> left);
}
l2r = ~l2r;
}
【在 m********f 的大作中提到】 : 一个二叉树,请按照“之”字型打印输出。 : 例如,二叉树如下 : 1 : / \ : 2 3 : / \ / \ : 4 5 6 7 : /\ / \ / \ / \ : 8 9 10 11 12 13 14 15 : 输出顺序为:
|
g****y 发帖数: 240 | 5 stack s1, s2;
s1.push(T);
while(!s1.empty() || !s2.empth())
{
if(!s1.empty())
{
Node* n = s1.top();
s1.pop();
cout << n->val << " ";
if(n->right) s2.push(n->right);
if(n->left) s2.push(n->left);
}
else // s2 is not empty
{
Node* n = s2.top();
s2.pop();
cout << n->val << " ";
if(n->left) s2.push(n->left);
if(n->right) s2.push(n->right);
}
} |
g****y 发帖数: 240 | 6 错了。。beidapig 的解法是对的。应该在if里面还有一个while循环。。。
【在 g****y 的大作中提到】 : stack s1, s2; : s1.push(T); : while(!s1.empty() || !s2.empth()) : { : if(!s1.empty()) : { : Node* n = s1.top(); : s1.pop(); : cout << n->val << " "; : if(n->right) s2.push(n->right);
|