问题描述:设栈的类型为seqstack,initstack(s)为对栈s初始化。
基本思路:用两个栈保存左右树访问的节点,每次访问根后PUSH一下,然后pop出继续保存左右子树。
// CopyBinaryTrees.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;
typedef char element;
typedef struct bitree
{
element data;
struct bitree* lchild;
struct bitree* rchild;
}bitree;
typedef struct node
{
bitree* data;
struct node *next;
}node,*pnode;
class seqstack
{
private:
node* top;//当前位置,头结点
public:
void initstack();
void push(bitree* bt);
BOOL pop(bitree* &bt);
BOOL isempty();//栈是否为空,空返回true,非空返回false
};
void seqstack::initstack()
{
top = NULL;
}
void seqstack::push(bitree* bt)
{
node* p = (node*)malloc(sizeof(node));
p->data = bt;
p->next = top;
top = p;
}
BOOL seqstack::pop(bitree* &bt)
{
node* p;
if(