二叉树
struct Node
{
int data;
Node* left;
Node* right;
};
Node* createNode(int data)
{
Node* tempNode = NULL;
tempNode = (Node*)malloc(sizeof(Node));
tempNode->left = NULL;
tempNode->right = NULL;
tempNode->data = data;
return tempNode;
}
void insertNode(Node* p, int data)
{
Node* tempNode = createNode(data);
//左子树<=data,右子树>data
while (1)
{
if (tempNode->data > p->data)
{
if (p->right == NULL)
{
p->right = tempNode;
break;
}
else
{
p = p->right;
}
}
if (tempNode->data <= p->data)
{
if (p->left == NULL)
{
p->left = tempNode;
break;
}
else
{
p = p->left;
}
}
}
}
先序遍历:
若树为空,则空操作返回。否则,先访问根节点,然后前序遍历左子树,再前序遍历右子树。
void preOrder(Node* p)
{
if (p == NULL)
{
return;
}
printf("%d", p->data);
preOrder(p->left);
preOrder(p->right);
}
中序遍历:
若树为空,则空操作返回。中序遍历根节点的左子树,然后是访问根节点,最后中序遍历根节点的右子树。
void inOrder(Node* p)
{
if (p == NULL)
{
return;
}
preOrder(p->left);
printf("%d", p->data);
preOrder(p->right);
}
后序遍历:
若树为空,则空操作返回。否则,从左到右先叶子后节点的方式遍历访问左右子树,最后访问根节点。
void postOrder(Node* p)
{
if (p == NULL)
{
return;
}
preOrder(p->left);
preOrder(p->right);
printf("%d", p->data);
}
层序遍历:
利用队列,根节点入队,子节点入队,最后依次出队即可