1. 程式人生 > >計算二叉樹中葉子節點的數目

計算二叉樹中葉子節點的數目

描述 先序建立一棵二叉樹,採用二叉連結串列結構儲存,並計算該二叉樹中葉子節點的數目。 輸入 輸入一串先序遍歷字串,根據此字串建立一棵二叉樹(以指標方式儲存)。
如輸入某二叉樹的先序序列為ABC##DE#G##F###(其中#表示空格字元,空格字元代表空樹)。 輸出 輸出葉子節點的個數(輸出結果後換行)。
輸入樣例 ABC##DE#G##F### 輸出樣例

3

#include <iostream>
#include <stdlib.h>
#include <cstdio>

#define DataType char
using namespace std;

typedef struct BinTreeNode
{
    char data;
    struct BinTreeNode *lchild;
    struct BinTreeNode *rchild;
}BinTree, *PBinTree;

PBinTree CreateBinTree()
{
    PBinTree root = (PBinTree)malloc(sizeof(BinTree));
    char c = getchar();
    if(c == '#')
        return NULL;
    else
    {
        root->data = c;
        root->lchild = CreateBinTree();
        root->rchild = CreateBinTree();

    }
    return root;
}

void PostOrderTraverse(PBinTree root)
{
    if(root)
    {
        printf("%c", root->data);

        PostOrderTraverse(root->lchild);
        PostOrderTraverse(root->rchild);
    }
}

int LeafCount(PBinTree root)
{
    if(!root)
        return 0;
    else
    {
        if((!root->lchild)&&(!root->lchild))
            return 1;
        else
            return LeafCount(root->lchild)+LeafCount(root->rchild);
    }
}
int main()
{
    PBinTree T;
    T = CreateBinTree();
    //PostOrderTraverse(T);
    cout << LeafCount(T) << endl;
    return 0;
}


相關推薦

計算葉子節點數目

描述 先序建立一棵二叉樹,採用二叉連結串列結構儲存,並計算該二叉樹中葉子節點的數目。 輸入 輸入一串先序遍歷字串,根據此字串建立一棵二叉樹(以指標方式儲存)。 如輸入某二叉樹的先序序列為ABC##D

為什麼葉子節點個數等於度為2的節點個數+1

證明: 設:節點總個數為n,葉子節點個數為n0n_0n0​,度為1的節點個數為n1n_1n1​,度為2的節點個數為n2n_2n2​,邊的個數為b。 n = n0n_0n0​ + n1n_1n1​ + n2n_2n2​ b = n - 1 可得 b = n0n_0

葉子節點的統計和高問題

1、已知二叉樹以二叉連結串列進行儲存,其中結點的資料域為data,編寫演算法,統計二叉樹中葉子結點值等於x的結點數目。 typedef struct BTNode { int data;

葉子節點的個數(遞迴)

題目:求二叉樹中葉子節點的個數。 思路: (1)樹中的葉子節點的個數 = 左子樹中葉子節點的個數 + 右子樹中葉子節點的個數。利用遞迴程式碼實現,簡單,易懂。 1> 如果給定節點T為NU

葉子節點的個數

int GetLeafNum(TreeNode *root){ if(!root) return 0; el

分別採用遞迴和非遞迴方式編寫兩個函式,求一棵葉子節點個數

#include #include #define MAXSIZE 50 typedef char datatype; typedef struct node { datatype data; struct node *lchild,*rchild; } bintnode,*bintre

{資料結構}計算葉子結點個數

 /************************************************** 演算法描述:編寫遞迴演算法,計算二叉樹中葉子節點數目(6.42)  ***************************************************

為什麽葉子節點個數等於度為2的節點個數+1

子節點 個數 等於 二叉樹 證明 n-1 das ash 葉子節點 證明: 設:節點總個數為n,葉子節點個數為:n0,度為1的節點個數為:n1,度為2的節點個數為n2,邊的個數為b n=n0+n1+n2 b=n-1; b=n1+2*n2;//來由不知,代入二叉樹可得此

葉子節點的個數

right alert sys print () null 運行 write binary 求二叉樹中葉子節點的個數 面試題二叉樹 題目描述 求二叉樹中葉子節點的個數。 葉子節點的定義:如果一個節點既沒有左孩子,也沒有右孩子,則該節點為葉子節點。 示例: 3

葉子結點的個數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

葉子結點的個數(遞迴和非遞迴的方式實現)

思路: (1)通過先序遍歷的方式求解 (2)葉子節點的特點: 左右孩子都為空 可以用非遞迴的方式 也可以用遞迴方式  package com.zhaochao.tree; import java.util.Stack; /** * Created by z

列印葉子節點

採用先序法建立一棵二叉樹,設計按先序輸出二叉樹的葉子,二叉樹的資料域型別為字元型,擴充套件二叉樹的葉子結點用‘#’表示,要求可以輸出多棵二叉樹的葉子結點,當二叉樹為空時程式結束。 #include<iostream> #include<queue> using names

leetcode.450.刪除節點

450.刪除二叉樹中的節點 給定一個二叉搜尋樹的根節點 root 和一個值 key,刪除二叉搜尋樹中的 key 對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹(有可能被更新)的根節點的引用。 一般來說,刪除節點可分為兩個步驟: 首先找到需要刪除的節點; 如果找到了,刪除它

節點 到 所有值為x的結點 的路徑

二叉樹中根節點到所有值為x的結點的路徑 void search_path(BTNode* p,int x){ BTNode* S[LEN]; //定義工作棧 int top=-1; //棧頂指標 BTNode* r=NULL; //指向最近訪問過的節點

計算葉子的和

Leetcode 404. Sum of Left Leaves Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15

資料結構-葉子節點到根節點的路徑相關問題)

二叉樹的括號表示法:A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))實現的功能:        1.輸出所有的葉子節點        2.輸出所有葉子節點到根節點的路徑        3.輸出2中第一條最長的路徑複習資料結構中......,程式碼適合

列印一個節點的所有祖先節點

在二叉樹中找到一個節點的祖先節點是我們常用的一個演算法,今天我們就來介紹兩種不同的方式,一種程式碼簡單但是效率較低,用到了遞迴,另一種程式碼複雜但是效率較高,利用非遞迴的後序遍歷 遞迴方式的程式碼如下

編寫演算法交換所有節點的左右子

實現程式碼如下: 非遞迴演算法: //root是根節點 void swap(){ BiNode * queue[100], * temp, * root1; int first = 0, las

輸出節點的祖先以及找最近公共祖先

問題1 給定一顆二叉樹,給定某個結點X的值,要求打印出該結點的祖先。 思路 想想上一篇中有講到後序遍歷的非遞迴演算法,其中棧裡面儲存的正是從根結點到當前結點的一條路徑。如果當前結點就是要找的結點X的話,那麼棧裡面儲存的就是該結點的所有祖先,依次輸出即可。如

計算葉子結點個數

#include "string.h"  #include "stdio.h"  #include "malloc.h" typedef struct BiTNode{     char data;   /*結點的資料域*/     struct BiTNode *lchi