#include#includestruct node
;void creatree(node *&p,int a,int start,int end)//使用*&p的原因
//要在函式體內修改形參的值,並且這個修改能作用到外面呼叫的實參,用單獨的指標就不行,只能用指標的引用或者指標的指標
else
return;
}int search(node *p,int m,int n)
/*查詢兩點的共同父節點,採用後續遍歷的方式訪問,遇到點就返回1,
訪問到的節點判斷子節點的返回數值情況,都是1,則這個節點就是共同父節點,
如果只有乙個是1,則此節點就返回1,否則子節點返回0,則此節點返回0;
此處的特殊情況就是這兩個點父子關係活著子孫關係,這時候在判斷節點的數值時
就要判斷子節點數字,如果此節點值與查詢的點相同,而且其孩子中也有乙個點此時應該返回2
這個2是查詢其父節點的乙個判斷訊號,如果某個節點子節點是2則此節點也就是要找的共同父節點
*/ else //判斷查詢父節點
}else
return 0;
}void main()
; node *root=null;
creatree(root,a,0,sizeof(a)/sizeof(int)-1); //建立樹
//bianli(root);
search(root,1,10);
}
二叉樹 查詢兩個任意節點的最近祖先
很久沒有用過二叉樹了,最近由於需要用到了,發現很多知識需要鞏固了,中間涉及到乙個演算法就是找任意兩個節點的最近祖先。通過本人回顧和演算,最終提出了下面乙個方法,網上也有很多其他的方式實現,再次僅對自己好幾個小時的工作作個記錄和積累吧!程式是用c語言寫的,個人覺得如果用c 實現會更加方便。首先是資料結...
二叉樹中兩個節點的最近公共父節點
這個問題可以分為三種情況來考慮 情況一 root未知,但是每個節點都有parent指標 此時可以分別從兩個節點開始,沿著parent指標走向根節點,得到兩個鍊錶,然後求兩個鍊錶的第乙個公共節點,這個方法很簡單,不需要詳細解釋的。情況二 節點只有左 右指標,沒有parent指標,root已知 思路 有...
求二叉樹兩個節點的最近公共祖先
偶然看到乙個特別特別巧妙的方法,在此記錄一下 typedef struct xbnodexbnode,xbtree 取名叫xbtree是因為以為這個是線索二叉樹 記住!這個不是線索二叉樹,線索二叉樹是儲存了前驅和後繼的指標,包括前序線索二叉樹 中序線索二叉樹和後序線索二叉樹三種。由於建立的時候多了乙...