首页 > 编程知识 正文

二叉树深度优先遍历顺序,二叉树先序遍历和深度优先搜索

时间:2023-05-04 02:07:47 阅读:202068 作者:3773

 首先定义一课树和结点

#include<stdio.h>#include<stdlib.h>typedef struct node{int data;struct node* left;struct node* right;}Node;//树结点typedef struct{Node *root;} Tree;

然后插入结点

这里我想插入结点之后为一棵二叉排序树

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)左、右子树也分别为二叉排序树;

(4)没有键值相等的节点。

我这里以插入结点的数列int arr[7]={6,8,2,1,4,3,9} 为例

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//当根结点不为空时,就要比大小了,temp为当前比较的结点{Node* temp=tree->root;//先让temp指向根结点while (temp!=NULL){if (value<temp->data)//value小的话走左边{if(temp->left==NULL)//左边为空,直接插入{temp->left=node;return;}//或者break也可以,这里结点已经插进去了,所以要跳出循环else temp=temp->left;//左边不为空就把temp指到左子树继续做比较}else//value大的就往右走{if(temp->right==NULL)//右边是空的就直接插入{temp->right=node;return;}elsetemp=temp->right;//右边不为空就把temp指到右子树继续做比较}}}}

 为验证是否插入正确,输出前序遍历序列看一下,中序遍历后序遍历都是一样的写法,改一下顺序即可。

void preorder(Node *node){if(node!=NULL){printf("%d ",node->data);preorder(node->left);preorder(node->right);}}

 如何求一个树的高度呢?

将这棵树的左右子树的高度求出,然后比大小,大的值加1,即为树的高度。递归。

 

//计算数的高度int height(Node* node)//将左子树和右子树的高度比大小,大的那边子树的高度加1,就是数的高度{int max;if(node==NULL)//一定要设置好这样的递归出口return 0;else{int left_h=height(node->left);int right_h=height(node->right);int max=left_h;if(right_h>max)max=right_h;return max+1;}}

二叉排序树里结点最大的值就是最右边的结点,那么对于一颗普通二叉树来说,找最大值,需要进行每个结点比较。

左右结点与当前根结点作比较,递归。

//对于一个普通二叉树找最大值,就是左边的值和右边的值和根结点作比较,然后递归,递归出口就是只有1个结点int getmax(Node* node)//假设结点的值都是正数{if (node==NULL){return -1;}else{int n1=getmax(node->left);int n2=getmax(node->right);int n3=node->data;int max=n1;if(n2>max)max=n2;if(n3>max)max=n3;return max;}}

 

 然后输出结果为

int main(){int arr[7]={6,8,2,1,4,3,9} ;Tree tree;tree.root=NULL;int i;//将arr这个数组放进树里for(i=0;i<7;i++){insert(&tree,arr[i]);}printf("前序遍历结果:n");preorder(tree.root);printf("n");int h;h=height(tree.root);printf("the height of tree=%dn",h);int max;max=getmax(tree.root);printf("the max of tree=%dn",max);}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。