二叉樹的建立與相關運算

2021-10-01 13:41:21 字數 1855 閱讀 4912

以廣義表的形式輸入二叉樹,建立二叉鍊錶,完成如下功能:

(1)三種遞迴遍歷

(2)計算並輸出單分支節點,雙分支結點,葉子結點及其個數。

(3)把任-種遞迴演算法改為非遞迴演算法。

(4)輸出二叉樹的樹高。

(5)在二叉樹中查詢給定值的節點,若找到則輸出從根到該節點的路徑。否則,輸出找不到。

#include "stdafx.h"

#include"stdlib.h"

#include"iostream"

using namespace std;

typedef char elemtype;

const int maxsize=100;

struct btreenode//二叉樹節點結構體

;void init(btreenode*& bt)//初始化二叉樹

void createbtree(btreenode*& bt,char*a)//根據廣義表建立相對應的二叉樹

top++;

s[top]=p;

k=1;

break;

case ')':

if(top==-1)

top--;

break;

case ',':

k=2;

break;

default://處理節點

p=new btreenode;

p->data=a[i];

p->left=p->right=null;

if(bt==null)

bt=p;

else

}i++;}}

void printbtree(btreenode*bt)}}

int high(btreenode*bt)

}void pre(btreenode*bt)

}void in(btreenode*bt)

}void post(btreenode*bt)

}int branch1(btreenode*bt)

else

else

return branch1(bt->left)+branch1(bt->right);

}      

}int branch2(btreenode*bt)

else

return branch2(bt->left)+branch2(bt->right);}}

int branch(btreenode*bt)

else

return branch(bt->left)+branch(bt->right);}}

void newpre(btreenode*bt)

if(p->left!=null)}}

}bool initbtree(btreenode*bt)

bool find(btreenode* bt,elemtype x,elemtype a,int&i)

else}}

void function()//選單的目錄

void create(btreenode*& bt)

void menu(btreenode* bt)

}else

cout<<"查詢失敗"

case 6:

cout<<"前序:";  pre(bt);  coutcin>>x;

j=i=0;

if(find(bt,x,a,i))

}else

cout<<"查詢失敗"

case 0:

exit(0);

break;

}system("pause");

system("cls");

menu(bt);

}int main()

二叉樹的建立與相關操作

二叉樹的建立與相關操作 1 二叉樹 是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 如圖 2 二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 二叉樹的子樹有左右之分,次序不能顛倒。3 二叉樹的第i層至多有2 i 1 ...

建立二叉樹 後序建立二叉樹

由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...

二叉樹 二叉樹的相關操作

遞迴實現 建立求樹高 求葉子數 求節點數 統計度為2的結點個數 後序輸出 先序輸出 中序輸出 交換左右子樹 include include include define true 1 define false 0 define ok 1 define error 0 define overflow ...