二叉树

Posted liujianing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树相关的知识,希望对你有一定的参考价值。

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

层序遍历:

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






































































以上是关于二叉树的主要内容,如果未能解决你的问题,请参考以下文章

二叉树及特殊二叉树(满二叉树完全二叉树二叉排序树平衡二叉树)的定义和性质(附详细推理过程)

二叉树二叉树的镜像

普通二叉树二叉查找树平衡二叉树常见操作汇总

SDUT 3341 数据结构实验之二叉树二:遍历二叉树

树二叉树满二叉树完全二叉树

SDUT 3341 数据结构实验之二叉树二:遍历二叉树