目次
バイナリ ツリーの深さを求めます (次のアルゴリズムは少し難しいです。詳細を読む)
アプリケーション操作の概要:
バイナリツリーの確立(DLRプリオーダートラバーサル、再帰アルゴリズム)
バイナリツリーのコピー
二分木の深さを求める
二分木内のノードの数を見つける
二分木内の葉ノードの数を見つける
もっと自分で書いてください(必ず手書きしてください)
前提条件:
#include<iostream>
using namespace std;
typedef int Status;
#define MAXTSIZE 100
typedef char TElemtype;//Tree Elemtype
//根据需求情况修改
typedef TElemtype SqBiTree;//sequence binary tree
//binary:二进制的; 二元的; 由两部分组成的;
SqBiTree bt;//binary tree
struct BiNode//二叉链表存储结构
{
TElemtype data;
struct
BiNode* lchild, * rchild;
//左右孩子指针
};
typedef BiNode * BiTree;
struct TriNode//trinary:三元的
{
TElemtype data;
struct
BiNode* lchild, * rchild,* parent;
};
typedef TriNode* TriTree;
int main()
{
}
バイナリ ツリーを作成します。
Status CreatBiTree(BiTree& T)
{
char input;
cin >> input;
if (input == '#')
return false;
T = new BiNode;
T->data = input;//D
CreatBiTree(T->lchild);//L
//嵌套
CreatBiTree(T->rchild);//R
//嵌套
return true;
}
入れ子:
呼び出しが実行される前に、別の呼び出し層が適用され、
ネスト内の次の呼び出し層が実行された後、
プログラムは先頭に戻り、ネストされた (オナニー人形) ステートメントの作成を開始し、
実行を続けます。
バイナリツリーのコピー
int Copy(BiTree T, BiTree& NewT)
{
if (T == NULL)
{
NewT = NULL;
return 0;
}
else
{
NewT = new BiNode;
NewT->data = T->data;
Copy(T->lchild, NewT->lchild);
Copy(T->rchild, NewT->rchild);
}
return 1;
}
&はリターンパスを意味しますか?? 仮引数、実引数、ポインタはどちらも戻り転送を表すものではないでしょうか?
バイナリ ツリーの深さを求めます (次のアルゴリズムは少し難しいです。詳細を読む)
int Depth(BiTree& T)
{
if (T == NULL)
return 0;
else
{
int m = Depth(T->lchild);
int n = Depth(T->rchild);
if (m > n)
return m + 1;
else
return n + 1;
}
}
バイナリ ツリー = ルート ノード + 左のサブツリー + 右のサブツリー;
右サブツリー = ルート ノード + 左サブツリー + 右サブツリー
左のサブツリー = ルート ノード + 左のサブツリー + 右のサブツリー...というサイクルが繰り返されます。
アイデア: 入れ子のアイデア、第一原則 (不可能な機能を実現するための解体と単純化)
複雑な二分木演算の問題を解決する
単一ノードのバイナリ ツリー (リーフ ノード) 問題の累積に分解します (再帰関数を使用してバイナリ ツリーを層ごとに分解します)
バイナリ ツリー内のノードの数を見つける
int NodeCount(BiTree T)//有点难度,多看看
{
if (T == NULL)
return 0;
else
return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}
二分木の葉ノードの数を見つける
int LeafNodeCount(BiTree T)
{
if (T == NULL)
return 0;
if (T->lchild == NULL && T->rchild == NULL)
return 1;
else
return LeafNodeCount(T->lchild) + LeafNodeCount(T->rchild);
}
スレッドバイナリツリー
構造定義:
struct BiThrNode
//Threaded binary tree:线索二叉树
{
int data;
int ltag, rtag;
struct BiTrNode* lchild, * rchild;
};
typedef BiThrNode * BiThrTree;
糸:
通した; 通した; 通した; 通した; 通した; 通した; 通した