樹(二叉鍊錶,非遞迴)兩結點的最近公共祖先結點

2021-10-23 23:27:23 字數 990 閱讀 9911

/*

二叉鍊錶非遞迴 查詢兩個結點的最近公共結點

思路:把乙個結點的全部父結點都放到棧中(類似於查詢從根結點到某一結點的路徑)

依次出棧判斷這棵樹的後代中是否包括另乙個結點

*/#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 建立二叉...