二叉树的建树,按层遍历,结点总数,页结点以及深度

建立一颗二叉树:

#include "handsomecui.h"
typedef struct Node{
    char data;
    Node *left, *right;
}Node, *Tree;
Tree build(){
    char c;
    SI(c);
    if(c == ‘#‘){
        return NULL;
    }
    else{
        Node *root = new Node;
        root->data = c;
        root->left = build();
        root->right = build();
        return root;
    }
}
void VisitTree(Node *root){
    if(root == NULL){
        return;
    }

    VisitTree(root->left);
    VisitTree(root->right);
    PI(root->data);
}
int main(){
    Tree tree = build();
    VisitTree(tree);
    return 0;
}

按层遍历:

#include "handsomecui.h"
#include<queue>
typedef struct Node{
    char data;
    Node *left, *right;
}Node, *Tree;
Tree build(){
    char c;
    SI(c);
    if(c == ‘#‘){
        return NULL;
    }
    else{
        Node *root = new Node;
        root->data = c;
        root->left = build();
        root->right = build();
        return root;
    }
}
void Floor_Visit(Node *root){
    queue<Tree>Q;
    Q.push(root);
    while(!Q.empty()){
        root = Q.front();
        Q.pop();
        PI(root->data);
        if(root->left != NULL)
            Q.push(root->left);
        if(root->right != NULL)
            Q.push(root->right);
    }
}
int main(){
    Tree tree = build();
    PI("按层访问的结果为:\n");
    Floor_Visit(tree);
    return 0;
}

结点总数,页结点以及深度:

#include "handsomecui.h"
typedef struct Node{
    char data;
    Node *left, *right;
}Node, *Tree;
Tree build(){
    char c;
    SI(c);
    if(c == ‘#‘){
        return NULL;
    }
    else{
        Node *root = new Node;
        root->data = c;
        root->left = build();
        root->right = build();
        return root;
    }
}
int Total_Node(Node *root){
    if(root == NULL)
        return 0;
    else
        return Total_Node(root->left) + Total_Node(root->right) + 1;
}
int Child_Node(Node *root){
    if(root->left == NULL && root->right == NULL){
        return 1;
    }
    else{
        int temp = 0;
        if(root->left != NULL)
            temp += Child_Node(root->left);
        if(root->right != NULL)
            temp += Child_Node(root->right);
        return temp;
    }
}
int Tree_Depth(Node *root){
    if(root == NULL)
        return 0;
    else
        return max(Tree_Depth(root->left), Tree_Depth(root->right)) + 1;
}
int main(){
    Tree tree = build();
    PI("这棵二叉树的总结点为");
    PI(Total_Node(tree));
    PI("\n这棵二叉树的页结点为");
    PI(Child_Node(tree));
    PI("\n这棵二叉树的深度为");
    PI(Tree_Depth(tree));
    return 0;
}
时间: 2024-10-12 03:23:07

二叉树的建树,按层遍历,结点总数,页结点以及深度的相关文章

二叉树总结—建树和4种遍历方式(递归&amp;&amp;非递归)

今天总结一下二叉树,要考离散了,求不挂!二叉树最重要的就是 建立.4种遍历方式,简单应用,如何判断两颗二叉树是否相似 二叉树分为 :1.完全二叉树  2.满二叉树 结构性质: 1).满二叉树 高度为h ,节点数则为 2^h - 1,且叶子节点全在最下层,且叶子节点数为2^(n-1)个{n代表二叉树层数,也叫深度} 2).n个节点的 完全二叉树 深度为 int(log2n)(以2为底n的对数)+ 1: 3).非空二叉树 叶子节点个数==双分支节点数+1 4).非空二叉树 某节点编号 n  若有左孩

二叉树的按层遍历

常见的前序.中序.后序都很常见,最近用到了按层遍历,记录一下: 思路:用一个队列来作为辅助空间.依次存储头结点,左节点和右节点.每次循环输出节点的值,直到队列为空这样一来就利用了队列先进先出的性质实现了非递归按层遍历二叉树. 具体实现: void levelOrderTraverse(const BiTree& t) { queue<BiTree> q; BiTree p = NULL; if(t) { q.push(t); } while(!q.empty()) { p = q.fr

数据结构——二叉树遍历之“层遍历”

系列文章:数据结构与算法系列——从菜鸟到入门 层次遍历 二叉树的层次遍历是指,从二叉树的第一层(根结点)开始,从上至下逐层遍历,在同一层中从左至右依次遍历. 设置一个队列,将二叉树的根结点放入队列中. 将队列中的头结点出队,赋值给临时变量 temp,同时输出打印 temp.val. 判断 temp 是否有左结点和右结点,若有,分别将左.右结点放入队列中. 重复步骤 2~3,直至队列为空,表示二叉树的层次遍历结束. private static void cengci(TreeNode root)

C语言实现最大二叉树并按层遍历

题目:给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左子树是通过数组中最大值左边部分构造出的最大二叉树. 右子树是通过数组中最大值右边部分构造出的最大二叉树. 通过给定的数组构建最大二叉树,并且输出这个树的根节点. Example 1: 输入: [3,2,1,6,0,5] 输入: 返回下面这棵树的根节点: 6 / 3 5 \ / 2 0 1 分析:(1)通过审题可知通过先序创建二叉树进行创建,即创建根节点,左子树,右子数. 所以选择递归的

二叉树(6)----按层遍历二叉树

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.按层遍历二叉树 第一步:需要借助队列,首先将根节点pRoot入队:

二叉树(二)——遍历、深度统计、叶子结点统计、结点统计

1.二叉树的相关算法的实现(链表). #include <stdio.h> #include <malloc.h> #define NULL 0 typedef struct tree { int data; struct tree *left, *right; }ElemBT; void create_btree(ElemBT *root, int list[], int n) /*n表示list数组中元素的个数*/ { int i; ElemBT *current, *pare

二叉树基础——前序遍历、中序遍历、后序遍历、按层遍历

转载请注明原文地址: 一:树的结点 一般默认树的结点由:结点值.左儿子.右儿子,构造函数组成. class TreeNode{ int value; TreeNode left; TreeNode right; public TreeNode(int i){ this.value=i; } } 二:二叉树的遍历实现--递归和非递归 1:递归实现==按照遍历方式(前.中.后)对左.根.右的访问顺序去 打印结点值.递归左儿子.递归右儿子 public void preorder(TreeNode r

二叉树 二叉树的性质 存储结构 遍历二叉树 C实现二叉树的创建和遍历 线索二叉树

定义 二叉树(binary tree)是n(n>=0)个结点的有限集合,该集合为空集合称为空二叉树,或者有一个根结点和两棵互不相交的,分别称为树根结点的左孩子树和右孩子树组成. 二叉树的特点 每个结点最多有两棵子树,所以二叉树总没有度大于2的结点 左子树和右子树是有顺序的,次数不能任意颠倒 即使树中某结点只有一棵子树,也要区分是左子树还是右子树 特殊的二叉树 1. 斜树 所有的结点都只有左子树的二叉树称为左斜树; 所有的结点都只有右子树的二叉树称为右斜树; 这两者统称为斜树 2. 满二叉树 在一

16.输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4261605.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印. 题目分析:可以用一个LinkedList的数据结构模拟队列来完成此操作.传入树