博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构 二叉树有遍历的想法
阅读量:496 次
发布时间:2019-03-07

本文共 1866 字,大约阅读时间需要 6 分钟。

#include
#include
using namespace std;#define LEN 30typedef struct TreeNode{
int data; TreeNode *LChild;//左节点 TreeNode *RChild;//右节点}TreeNode;//按照从左到右,从上到下给二叉树赋值TreeNode *init(int *init_arr,int lens){
TreeNode *TreeArr[LEN]; //先形成一个数组 int i; for(i=0;i
data=init_arr[i]; TreeArr[i]->LChild=NULL; TreeArr[i]->RChild=NULL; }else TreeArr[i]=NULL; } //再把他们串成链表 int len=lens/2; for(i=0;i
LChild=TreeArr[2*i+1]; TreeArr[i]->RChild=TreeArr[2*i+2]; } } return TreeArr[0];}//先序遍历void PreOrder(TreeNode *head){
if(head!=NULL){
cout<
data<<" "; PreOrder(head->LChild); PreOrder(head->RChild); }}//中序遍历void InOrder(TreeNode *head){
if(head!=NULL){
InOrder(head->LChild); cout<
data<<" "; InOrder(head->RChild); }}//后续遍历void PostOrder(TreeNode *head){ if(head!=NULL){ PostOrder(head->LChild); PostOrder(head->RChild); cout<
data<<" "; }}//输出二叉树叶子节点void print_leaf_node(TreeNode *root){ if(root!=NULL){ if(root->LChild==NULL&&root->RChild==NULL)cout<
data<<" "; print_leaf_node(root->LChild); print_leaf_node(root->RChild); }}//统计叶子节点个数:方法一int Leaf_count=0;void leaf_num1(TreeNode *root){ if(root!=NULL){ leaf_num1(root->LChild); leaf_num1(root->RChild); if(root->LChild==NULL&&root->RChild==NULL)Leaf_count++; }}//统计叶子节点个数:方法二int leaf_num2(TreeNode *root){ if(root==NULL){ return 0; }else if(root->LChild==NULL&&root->RChild==NULL){ return 1; }else{ return (leaf_num2(root->LChild)+leaf_num2(root->RChild)); }}//求二叉树高度:先序遍历int depth=0;void Pre_tree_depth(TreeNode * head, int h){ if(head!=NULL){ if(h>depth)depth=h; Pre_tree_depth(head->LChild,h+1); Pre_tree_depth(head->RChild,h+1); }}int main(int argc, char const *argv[]){ TreeNode *head=(TreeNode *)malloc(sizeof(TreeNode)); int init_arr[]={ 1,2,3,0,4,0,5};//0表示 head=init(init_arr,7);//传数组跟数组的长度 PreOrder(head);//先序遍历输出 cout<

转载地址:http://ncccz.baihongyu.com/

你可能感兴趣的文章