計算二叉樹中葉子節點的數目
如輸入某二叉樹的先序序列為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