二叉树的增删查改并无太大意义;主要是遍历二叉树的方法,即前中后序遍历;
TreeNode.h
#pragma once
#include<iostream>
using namespace std;
class BinaryTreeNode
{
public: BinaryTreeNode* left;
BinaryTreeNode* right;
char data;
};
void PrevOrder(BinaryTreeNode* root);
void InOrder(BinaryTreeNode* root);
void PostOrder(BinaryTreeNode* root);
int TreeSize(BinaryTreeNode* root);
TreeNode.cpp
#include"TreeNode.h"
void PrevOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
cout << " NULL ";
return;
}
cout << root->data<<endl;
PrevOrder(root->left);
PrevOrder(root->right);
}
void InOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
cout << " NULL ";
return;
}
InOrder(root->left);
cout << root->data << endl;
InOrder(root->right);
}
void PostOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
cout << " NULL ";
return;
}
PostOrder(root->left);
PostOrder(root->right);
cout << root->data << endl;
}
int TreeSize(BinaryTreeNode* root)
{
return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}
int main()
{
BinaryTreeNode* A = new BinaryTreeNode;
A->data = 'A';
A->left = NULL;
A->right = NULL;
BinaryTreeNode* B = new BinaryTreeNode;
B->data = 'B';
B->left = NULL;
B->right = NULL;
BinaryTreeNode* C = new BinaryTreeNode;
C->data = 'C';
C->left = NULL;
C->right = NULL;
BinaryTreeNode* D = new BinaryTreeNode;
D->data = 'D';
D->left = NULL;
D->right = NULL;
BinaryTreeNode* E = new BinaryTreeNode;
E->data = 'E';
E->left = NULL;
E->right = NULL;
A->left = B;
A->right = C;
B->left = D;
B->right = E;
//PrevOrder(A);
//InOrder(A);
PostOrder(A);
cout<< TreeSize(A);
}
前序遍历:先遍历根,再遍历左子树,最后遍历右子树;
void PrevOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
cout << " NULL ";
return;
}
cout << root->data<<endl;
PrevOrder(root->left);
PrevOrder(root->right);
}
中序遍历:先遍历左子树,再遍历根,最后遍历右子树
void InOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
cout << " NULL ";
return;
}
InOrder(root->left);
cout << root->data << endl;
InOrder(root->right);
}
后序遍历:先遍历左子树,在遍历右子树,最后遍历根;
void PostOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
cout << " NULL ";
return;
}
PostOrder(root->left);
PostOrder(root->right);
cout << root->data << endl;
}
数的节点数:
int TreeSize(BinaryTreeNode* root)
{
return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}