二叉树

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);
}

层序遍历:

利用队列,根节点入队,子节点入队,最后依次出队即可

原文地址:https://www.cnblogs.com/liujianing/p/9348268.html