題目描述:
給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標
分析:情況
一、有右子樹,這時只需要把其右孩子作為下乙個遍歷的(並不是要找的)節點,然後沿著該節點的左子樹(如果有的話)
出發,直到遇到葉子節點,那麼該葉子節點就是其下乙個要找的節點;
情況二:沒有右子樹
① 該節點是其父節點的左孩子,如果是則其下乙個要找的節點是其父節點;
② 不是其父節點的左孩子,則把其父節點作為下乙個遍歷的節點,向上回溯,直到找到節點沒有父節點或者節點是其父節點的左孩子為止,該位置的父節點則為尋找的點
**:
// 2019-06-14
public class q8 }
public static listnode1 getnext(listnode1 root)
return temp;
} // 無右子樹 但節點是其父節點的左節點
if(root.right==null && root.father.left==root)
// 無右子樹 節點是父節點的右子樹
if(root.right==null && root.father.right==root)
temp = temp.father;
}}
system.out.println("there are not next node");
return null;
}}
// 2019-03-11
public class q8
else }
public static listnode findnext(listnode node)
listnode temp = null;;
// 情況一:存在右子樹——尋找右子樹中的最左節點
if(node.right!=null)
return temp;
}// 情況二:不存在右子樹,此中分兩類
else
// 如果該結點有父節點,尋找上層結點中,第乙個為自己父節點的左節點的位置,並返回該結點的父節點
else else
}temp = temp.father;
}return null;
}} }
}
劍指offer第二版 面試題6(java)
面試題6 從尾到頭列印鍊錶 題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值 鍊錶的結點定義如下 public class listnode 注意 面試中,如果打算修改輸入的資料,最好先問好是否資料是允許修改的 思路 1.遍歷順序從頭到尾,列印順序從尾到頭,第乙個結點最開始被訪問,但是最...
劍指offer第二版 面試題9(java)
面試題9 用兩個棧實現佇列 題目描述 方法 兩個棧 stack1 stack2 插入時,直接放入stack1 刪除時,直接彈出pop2中的物件 如果pop2為空,則先將pop1中的物件放入stack2中,再從stack2裡pop第乙個 如 依次放入stack1中1 2 3,在彈出並放入stack2中...
劍指offer第二版 面試題10(java)
面試題10 斐波那契數列 題目一 寫乙個函式,輸入n,求斐波那契數列的第n項。定義 分段函式 f n 0 if n 0 f n 1 if n 1 f n f n 1 f n 2 if n 1 可用遞迴的方式,但在遞迴呼叫層級太多時,會導致呼叫棧溢位,且在此題中,遞迴方法有很多重複的計算 使用自下而上...