/*
二叉鍊錶非遞迴 查詢兩個結點的最近公共結點
思路:把乙個結點的全部父結點都放到棧中(類似於查詢從根結點到某一結點的路徑)
依次出棧判斷這棵樹的後代中是否包括另乙個結點
*/#include
#include
using
namespace std;
const
int maxsize =
100;
typedef
struct bitnode
*bitree;
void
createtree
(bitree &t)
}//將結點c的全部祖先結點依次入棧
bitree stack[maxsize]
;int top =-1
;void
getnode
(bitree t,
char c)
//棧非空
if(top>=0)
top--;}
//結點未訪問過
else}}
while
(top>=
0|| p)
;//棧非空 或者 p結點不為空--繼續迴圈
}//判斷樹t的後代結點中是否有結點c(不能用遍歷演算法的遞迴形式,那樣沒辦法判斷沒有所要查詢結點的情況)
bool
presearch
(bitree t,
char c)
if(p-
>rchild)}}
return
false;}
//找結點v和結點c的最近公共祖先結點
bitree findfirstcommonparentnode
(bitree t,
char c,
char v)
return
null;}
intmain()
二叉排序樹非遞迴新增結點
1 若為空樹 直接作為根節點 2 若不為空,且插入元素為不重複,則按二叉排序樹的演算法進行新增結點 3 若不為空,且插入元素重複,則在結點標記位count include includetypedef struct nodebitree void addnode bitree tree,int va...
二叉搜尋樹(遞迴 非遞迴)
完整源 在此 1 二叉搜尋樹的概念 二叉搜尋樹又稱二叉排序樹,它或者是一棵空樹,或者是具有以下性質的二叉樹。若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值 若它的右子樹不為空,則右子樹上所有的節點的值都大於根節點的值 它的左右子樹也分為二叉搜尋樹 此二叉樹的中序遍歷結果為 0,1,2,3...
二叉樹 遞迴 非遞迴
include include include include using namespace std typedef struct node bintree typedef struct node1 btnode void creatbintree char s,bintree root 建立二叉...