對於兩個結點最近的公共祖先,有三種情況:
1,該二叉樹是一棵二叉搜尋樹
struct treenode
};treenode* lowestancestor(treenode* _root, treenode* node1, treenode* node2)
else if (_root->_value < m1)
else
}return _root;
}
2,該二叉樹是一棵具有三叉鏈的二叉樹
struct treenode
};treenode* lowestancestor(treenode* _root, treenode* node1, treenode* node2)
cur = cur->_parent;
} }}
3,一般的普通二叉樹:
struct treenode
};treenode* lowestancestor(treenode* _root, treenode* node1, treenode* node2)
treenode* left = lowestancestor(_root->_left, node1, node2);
treenode* right = lowestancestor(_root->_right, node1, node2);
if (left != null&&right = !null)
return left = null ? right : left;
}
求二叉樹中兩個節點的最近公共祖先結點
1 原理 二叉搜尋樹是排序過的 位於左子樹的結點都比父結點小,位於右子樹的結點都比父結點大,我們只需從根節點開始和兩個輸入的結點進行比較,如果當前節點的值比兩個結點的值都大,那麼最低的公共祖先結點一定在該結點的左子樹中,下一步開遍歷當前結點的左子樹。如果當前節點的值比兩個結點的值都小,那麼最低的公共...
(演算法)二叉樹中兩個結點的最近公共父結點
二叉樹中兩個結點的最近公共父結點 二叉樹結點的定義如下 struct treenode 前面在劍指offer中出現了類似的題目,但要求的思路都不太一樣,請參考 這裡介紹一種複雜度較低的遞迴實現。如題我們要找的二叉樹中兩個結點的最近公共結點,如果我們從上往下遞迴,按照深度優先搜尋的方式。如果當前結點為...
求二叉樹中任意兩個結點的距離
實現步驟 計算跟到第乙個結點的距離 計算跟到第二個結點的距離 計算lca 計算跟到lca結點的距離 結果為 1 2 2 4 因為重複計算了兩次的從跟到lca結點的距離 class node object def init self value 0 self value value self left...