二叉树的插入,递归遍历和深度节点数
2012-04-23 00:50
393 查看
二叉树的插入,前序,中序,后序遍历,递归求深度和节点数
View Code
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; }
相关文章推荐
- 二叉树叶子节点遍历---递归与非递归方法求取树深度
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式 二叉树的遍历方式: 1、深度优先:递归,非递归实现方式 1)先序遍历:先访问根节点,再依次访问左子树和右子树 2)中序遍
- 二叉树的前、中、后序遍历(递归和非递归)、层序遍历、深度、叶子节点个数
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- 二叉树,递归、非递归遍历,求深度,输出叶子节点
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 二叉树的创建,遍历,查找,查找父节点,深度,大小等的递归实现
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 二叉树的创建,遍历,叶节点数,总结点数,深度
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树中插入节点的递归与非递归