找出二叉樹上任意兩個節點的最近共同父節點

2021-06-22 07:28:34 字數 754 閱讀 7428

#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是因為以為這個是線索二叉樹 記住!這個不是線索二叉樹,線索二叉樹是儲存了前驅和後繼的指標,包括前序線索二叉樹 中序線索二叉樹和後序線索二叉樹三種。由於建立的時候多了乙...