概述
#include<stdio.h>
#include<cstdlib>
typedef struct node//树的节点
{
int data;//节点的值
struct node* left;
struct node* right;
}Node;
typedef struct//树根
{
Node* root;
}Tree;
void insert(Tree* tree,int value)
{
Node* node=(Node*)malloc(sizeof(Node));//创建一个节点
node ->data=value;//接收住传入的数字
node->left=NULL;
node->right=NULL;
if(tree->root==NULL)//当树是空树时,就将该节点放入根节点
{
tree->root=node;
}
else//若树不为空 ,则就开始判断要放入哪一个位置的节点
{
Node* temp=tree->root;// 从树根开始判断插入哪里
while(temp!=NULL)//当遍历到的子节点有数字的时候,就开始判断要放入左边还是右边
{
if(value<temp->data)//小于就进入其左节点
{
if(temp->left==NULL) //如果其左孩子为空,就放入
{
temp->left=node;
return;
}
else//将temp更新,重新当成根节点开始判断
{
temp=temp->left;
}
}
else//否则进入右孩子
{
if(temp->right==NULL)
{
temp->right=node;
return;
}
else
{
temp=temp->right;
}
}
}
}
return;
}
void midorder(Node* node)//中序遍历
{
if(node!=NULL)
{
midorder(node->left);
printf("%d ",node->data);
midorder(node->right);
}
}
int main()
{
Tree tree;
tree.root=NULL;//创建一个空树
int n;
scanf("%d",&n);//节点数
for(int i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
insert(&tree,temp);
}
midorder(tree.root);
getchar();
getchar();
return 0;
}
接下来介绍三种遍历方式:
void PreOrder(Node* node)//二叉树的先序遍历
{
if(node!=NULL)
{
printf("%d ",node->data);
PreOrder(node->left);
midorder(node->right);
}
}
void midorder(Node* node)//中序遍历
{
if(node!=NULL)
{
midorder(node->left);
printf("%d ",node->data);
midorder(node->right);
}
}
void LastOrder(BiTree T)//后序遍历
{
if(T==NULL)
return;
LastOrder(node->left);
LastOrder(node->right);
printf("%d ",node->data);
}
来自此篇scdn
下面来看来自leetcode的一道题;
剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
层次遍历,每层每层地进行遍历,每弹出一个节点,都要将它地两个子节点放入q地容器中,放在队列后面,当遍历完前面的层,后就将会遍历到它们了
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
vector<int> res;
if(root == NULL) return res;
queue<TreeNode *> q;
q.push(root);//放入根节点
while(!q.empty())
{
TreeNode* temp = q.front();
q.pop(); //queue的pop是弹出最最先进入的那个数,即front的那个数
res.push_back(temp->val);
if(temp->left) q.push(temp->left);
if(temp->right) q.push(temp->right);
}
return res;
}
};
最后
以上就是自觉芝麻为你收集整理的二叉树的创建与遍历的全部内容,希望文章能够帮你解决二叉树的创建与遍历所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复