設計乙個演算法,找出二叉搜尋樹中指定節點的「下乙個」節點(也即中序後繼)。
如果指定節點沒有對應的「下乙個」節點,則返回null。
示例 1:
輸入: root = [2,1,3], p = 1
2/ \
1 3
輸出: 2
示例 2:
輸入: root = [5,3,6,2,4,null,null,1], p = 6
5/ \
3 6
/ \2 4
/
1輸出: null
單純中序遍歷:一旦找到比p的val大的(第乙個比p的val大的節點就是p的中序後繼)直接返回。
/** * definition for a binary tree node.
* struct treenode
* }; */
class
solution
auto res=inordersuccessor(root->left,p);
if(res and res->val>p->val)
if(root->val>p->val)
res=inordersuccessor(root->right, p);
if(res and res->val>p->val)
return nullptr;//
後繼要麼不存在,要麼不在以root為根的子樹中
}};
用乙個引用儲存中序遍歷的前驅節點:
/** * definition for a binary tree node.
* struct treenode
* }; */
class
solution
void helper(treenode* node,treenode*& pre)
helper(node->left,pre);
if(pre==p)
pre=node;
helper(node->right,pre);
}};
如果p有右子樹,取其右子樹中的最靠左節點即可。
如果p沒有右子樹,那麼利用二叉搜尋樹性質,從root開始往下查詢比p->val大的最小val值節點即可。
/** * definition for a binary tree node.
* struct treenode
* }; */
class
solution
return
p; }
else
if(root->valval)
else
if(root->val>p->val)
}return res->val==int_max?nullptr:res;
}return
nullptr;
}};
面試題 04 06 後繼者
面試題 04.06.後繼者 難度中等23收藏分享切換為英文關注反饋 設計乙個演算法,找出二叉搜尋樹中指定節點的 下乙個 節點 也即中序後繼 如果指定節點沒有對應的 下乙個 節點,則返回null。示例 1 輸入 root 2,1,3 p 1 2 1 3輸出 2示例 2 輸入 root 5,3,6,2,...
程式設計師面試金典 04 06 後繼者 遞迴
設計乙個演算法,找出二叉搜尋樹中指定節點的 下乙個 節點 也即中序後繼 如果指定節點沒有對應的 下乙個 節點,則返回null。示例 1 輸入 root 2 1,3 p 12 1 3輸出 2示例 2 輸入 root 5 3,6 2,4 null,null,1 p 65 3 6 24 1 輸出 null...
面試題 PHP面試題
建議 比如是系統配置,缺少了無法執行,自然使用 require 如果某一段程式少了,只是少了統計 訪問的,不是必不可少的。可以使用 include 而加不加 once 就是效率上的區別,雖然系統會幫你考慮只包含一次,但系統的判斷會降低效率,因此,更應該在開發之初,把目錄結構調整高好,盡量不使用 on...