zoukankan      html  css  js  c++  java
  • 二叉树的插入,递归遍历和深度节点数

    二叉树的插入,前序,中序,后序遍历,递归求深度和节点数

    View Code
    #include<stdlib.h>
    #include<stdio.h>
    
    struct tree_el {
       int val;
       struct tree_el * right, * left;
    };
    
    typedef struct tree_el node;
    
    void insert(node ** tree, node * item) {
       if(!(*tree))
        {
          *tree = item;
          return;
        }
       if(item->val<=(*tree)->val)
          insert(&(*tree)->left, item);
       else if(item->val>(*tree)->val)
          insert(&(*tree)->right, item);
    }
    
    void InOrd(node * tree)
    {
       if(tree->left)
            InOrd(tree->left);
       printf("%d ",tree->val);
       if(tree->right)
            InOrd(tree->right);
    }
    
    void PreOrd(node *tree)
    {
        printf("%d ",tree->val);
        if(tree->left)
            PreOrd(tree->left);
       if(tree->right)
            PreOrd(tree->right);
    }
    
    void PostOrd(node *tree)
    {
        if(tree->left)
            PostOrd(tree->left);
       if(tree->right)
            PostOrd(tree->right);
        printf("%d ",tree->val);
    }
    
    int TreeDepth(node* tree)
    {
          // the depth of a empty tree is 0
          if(!tree)
                return 0;
    
          // the depth of left sub-tree
          int nLeft = TreeDepth(tree->left);
          // the depth of right sub-tree
          int nRight = TreeDepth(tree->right);
    
          // depth is the binary tree
          return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
    }
    
    int BTreeNodeCount(node *tree)
    {
        if(tree == 0)
            return 0;
        else
        {
            int l = BTreeNodeCount(tree->left);
            int r = BTreeNodeCount(tree->right);
            return l + r + 1;
        }
    }
    
    int main() {
       node * curr, * root;
       int i;
       int data;
       int lenth;
    
       root = NULL;
       printf("请输入要插入的元素,按Ctrl + Z结束输入\n");
       while(scanf("%d",&data)!= EOF)
       {
           curr = (node *)malloc(sizeof(node));
          curr->left = curr->right = NULL;
          curr->val = data;
          insert(&root, curr);
       }
       printf("先序遍历 : ");
       PreOrd(root);
    
       printf("\n中序遍历 : ");
       InOrd(root);
    
       printf("\n后序遍历 : ");
        PostOrd(root);
    
        printf("\n树的深度为 : %d\n", TreeDepth(root));
    
        printf("树的节点数为:%d\n", BTreeNodeCount(root));
    
        return 0;
    }
  • 相关阅读:
    ubuntu实时显示网速cpu占用和内存占用率
    删除以....开头的所有文件
    0.0.....1 至 0.99.......9 之间正则
    引入腾讯视频播放,可控制是否暂停播放
    解决微信小程序textarea层级太高遮挡其他组件的问题
    查看某分支推送记录
    小程序下载canvas生成图片
    微信小程序企业付款到个人
    秒 转化为 时:分:秒 ------- 类似倒计时
    iOS--崩溃日志的格式化分析---格式化crash日志
  • 原文地址:https://www.cnblogs.com/genslow/p/2465848.html
Copyright © 2011-2022 走看看