二叉树的任意两个结点的最小公共父亲结点
在这里介绍两种方法:中序法、后序法
1.后序法:主要利用的是后序遍历的时候,栈里面存放的是此时的这个结点的所有的父亲结点,所以这个时候只要将两个结点的父亲序列都取出来,然后进行对齐,之后两个指针同时移动,当指针所指向的内容相等的时候就找到了那个最小的公共父亲结点
TreeNode<T> * lowestCommonAncestor(TreeNode<T> * p, TreeNode<T> * q)
{
TreeNode<T> * cur = m_root;
stack<TreeNode<T> *> st;
stack<bool> tag;
stack<TreeNode<T> *> res1;
stack<TreeNode<T> *> res2;
while (cur || !st.empty())
{
for (; cur; cur = cur->m_left)
{
st.push(cur);
tag.push(false