void inthread(threadtree &p,threadtree &pre)
if(pre!=null&&pre->rchild==null)
pre=p;
inthread(p->rchild,pre);
}}void creatintread(threadtree
t)}
elemtype
comm_ancestor(sqtree
t,int i,int j)
return
t[i];
}}
int btdepth(bitree
t) return level;
}}
解題思想:根據完全二叉樹的定義,具有n個結點的完全二叉樹與滿二叉樹中編號1–n的結點一一對應。
採用層次遍歷的演算法,將所有結點加入佇列(包括空結點),當遇到空結點時,檢視其後是否有非空結點,若有,則二叉樹不是完全二叉樹。
bool iscomplete(bitree &t)
else 結點為空,檢查其後是否有非空結點
}return
1; }
}
int dsonnodes(bitree &t)
解題思路:設定乙個全域性變數i記錄已訪問過的結點序號,其初值是根結點在先序序列中的序號,即為1,。
當二叉樹為空時返回特殊字元『#』。
當i=k時,小時豪到滿足條件的結點。返回b->data;
當i!=k時,則遞迴地在左子樹中查詢,若找到了則返回該值,否則繼續遞迴地在右子樹中查詢,並返回其結果
int i=1;
elemtype
prenode(bitree b,int k)
演算法思想:採用非遞迴後序遍歷,最後訪問根節點,當訪問之為x的結點時,棧中所有元素均為該結點的祖先,依次出棧列印即可
typedef struct
stack tag=0表示左子樹被訪問,tag=1時表示右子女被訪問
void search(bitree bt,elemtype x)
if(bt->data==x)
while(top!=0&&s[top].tag==1)
top--;
if(top!=0)
}}
演算法思想:採用後續非遞迴遍歷演算法,棧中存放二叉樹結點的指標,當訪問到某結點時,棧中所有元素均為該結點的祖先,後續遍歷必然先遍歷到結點p,棧中元素均為p的忑結點,先將棧複製到另一塊輔助棧中去,繼續遍歷到結點q時,將棧中元素從棧頂開始逐個到輔助棧中去匹配,第乙個匹配到的元素即結點p與q的公共最近祖先。
typedef struct
srack;
stack s1,s2;
bitree
ancestor(bitree
root,bitnode *p,bitnode *q)
while(top!=0&&s[top].tag==1)
if(s[top].t==q)
top--;
}if(top!=0)}}
}
採用層次遍歷,求出所有結點的層次,並將所有結點與對應的層次放在乙個佇列中,然後通過掃瞄佇列求出各層的結點總數即二叉樹的寬度
typedef struct
qu;int btwidth(bitree b)
if(p->rchild!=null)
max=0;
i=0;k=1;
while(i<=qu.rear)
k=qu.level[i];
if(n>max)
max=n;
}return max;
}}
演算法思想:通常我們所使用的先序,中序和後續遍歷對於葉結點的訪問都從左到右排序,這裡我們採用中序遍歷遞迴演算法。
設前驅結點指標pre,初始為空,第乙個葉結點由指標head指向,遍歷到葉結點時,就將它的前驅rchild指向它,最後乙個葉結點rchild為空
linklist head,pre=null;
linklist
inorder(bitree bt)
else
inorder(bt->rchild);
pre->rchild=null;
}return head;
}}
int similar(bitree
t1,bitree
t2)}
二叉樹相關演算法
節點 class node t public node t left public node t right public node t value,node t left,node t right public node t value this value,null null 二叉樹 前中後深度...
二叉樹相關演算法 二
leetcode 437.path sum iii 第乙個想法就是遍歷二叉樹,找出每個節點的可能性。這個思路時間複雜度為o n 2 private int num public intpathsum treenode root,int sum private void recur treenode ...
二叉樹的相關演算法
二叉樹 二叉查詢樹 是這樣一類的樹,父節點的左邊孩子的key都小於它,右邊孩子的key都大於它。二叉樹在查詢和儲存中通常能保持logn的查詢 插入 刪除,以及前驅 後繼,最大值,最小值複雜度,並且不占用額外的空間。include includeusing namespace std class tr...