二叉树先序遍历(C++)
#include<iostream>
using namespace std;
typedef struct BitNode {
int data;
BitNode* lchild, * rchild;
}BitNode,*BitTree;
void PreOrder(BitTree T) {
if (T == nullptr)
return;
cout << "visited:" << T->data << endl;
PreOrder(T->lchild);
PreOrder(T->rchild);
}
BitTree createBinaryTree(int* preorder, int& index) {
if (index >= 0 && preorder[index] != -1) {
BitNode* newNode = new BitNode;
newNode->data = preorder[index++];
newNode->lchild = createBinaryTree(preorder, index);
if (newNode->lchild == NULL)
index++;
newNode->rchild = createBinaryTree(preorder, index);
if (newNode->rchild == NULL)
index++;
return newNode;
}
return nullptr;
}
void DeleteBT(BitTree& T) {
if (T != nullptr) {
DeleteBT(T->lchild);
DeleteBT(T->rchild);
delete T;
T = nullptr;
}
}
int main() {
BitTree T = NULL;
int preorder[] = { 1, 2, -1, 0,5,-1,-1,-1, 3, 4,-1,-1, -1 };
int index = 0;
T = createBinaryTree(preorder, index);
PreOrder(T);
DeleteBT(T);
return 0;
}