我是靠谱客的博主 自觉芝麻,最近开发中收集的这篇文章主要介绍二叉树的创建与遍历,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


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

最后

以上就是自觉芝麻为你收集整理的二叉树的创建与遍历的全部内容,希望文章能够帮你解决二叉树的创建与遍历所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部