劍指offer第二版 面試題8 java

2021-09-12 08:58:11 字數 1273 閱讀 8454

題目描述:

給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標

分析:情況

一、有右子樹,這時只需要把其右孩子作為下乙個遍歷的(並不是要找的)節點,然後沿著該節點的左子樹(如果有的話)

出發,直到遇到葉子節點,那麼該葉子節點就是其下乙個要找的節點; 

情況二:沒有右子樹

① 該節點是其父節點的左孩子,如果是則其下乙個要找的節點是其父節點; 

② 不是其父節點的左孩子,則把其父節點作為下乙個遍歷的節點,向上回溯,直到找到節點沒有父節點或者節點是其父節點的左孩子為止,該位置的父節點則為尋找的點

**:

// 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 可用遞迴的方式,但在遞迴呼叫層級太多時,會導致呼叫棧溢位,且在此題中,遞迴方法有很多重複的計算 使用自下而上...