码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树

时间:2018-07-22 00:16:22      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:return   节点   sizeof   temp   先序遍历   insert   lse   队列   break   

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

层序遍历:

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

二叉树

标签:return   节点   sizeof   temp   先序遍历   insert   lse   队列   break   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!