以廣義表的形式輸入二叉樹,建立二叉鍊錶,完成如下功能:
(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 ...