ਇੱਕ ਬਾਈਨਰੀ ਟ੍ਰੀ ਇੱਕ ਸਿੰਗੜੀ ਢਾਂਚਾ ਹੈ ਜਿੱਥੇ ਹਰੇਕ ਨੋਡ ਦੇ ਵੱਧ ਤੋਂ ਵੱਧ ਦੋ ਬੁੱਕਲੇ ਹਨ, ਜਿਨ੍ਹਾਂ ਨੂੰ left ਅਤੇ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਇਸਦਾ ਇੱਕ ਸਿੰਗਲ ਹੈ; ਕਿਸੇ ਬੁੱਕਲੇ ਤੋਂ ਬਿਨਾਂ ਨੋਡ ਹਨ। ਇਹ BSTs, heaps ਅਤੇ expression trees ਦੀ ਬੁਨਿਆਦ ਹੈ।
ਇੱਕ ਬਾਈਨਰੀ ਟ੍ਰੀ ਇੱਕ ਸਿੰਗੜੀ ਢਾਂਚਾ ਹੈ ਜਿੱਥੇ ਹਰੇਕ ਨੋਡ ਦੇ ਵੱਧ ਤੋਂ ਵੱਧ ਦੋ ਬੁੱਕਲੇ ਹਨ, ਜਿਨ੍ਹਾਂ ਨੂੰ left ਅਤੇ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਇਸਦਾ ਇੱਕ ਸਿੰਗਲ ਹੈ; ਕਿਸੇ ਬੁੱਕਲੇ ਤੋਂ ਬਿਨਾਂ ਨੋਡ ਹਨ। ਇਹ BSTs, heaps ਅਤੇ expression trees ਦੀ ਬੁਨਿਆਦ ਹੈ।
right 1 depth 0 (root)
/ \
2 3 depth 1
/ \
4 5 depth 2 (leaves: 4,5,3)
class Node:
def __init__(self, val, left=None, right=None):
self.val, self.left, self.right = val, left, right
def inorder(n): # left, node, right -> 4 2 5 1 3
if n:
inorder(n.left); print(n.val); inorder(n.right)
def preorder(n): # node, left, right -> 1 2 4 5 3
if n:
print(n.val); preorder(n.left); preorder(n.right)
def postorder(n): # left, right, node -> 4 5 2 3 1
if n:
postorder(n.left); postorder(n.right); print(n.val)
ਇੱਕ level-order (BFS) ਟ੍ਰਾਵਰਸਲ ਇੱਕ queue ਵਰਤਦਾ ਹੈ ਅਤੇ ਡੂੰਘਾਈ ਦੁਆਰਾ ਵਿਜ਼ਿਟ ਕਰਦਾ ਹੈ।
| Traversal | ਆਰਡਰ | ਆਮ ਉਪਯੋਗ |
|---|---|---|
| Inorder | L, N, R | BST ਦਾ ਸਾਜਿਤ ਆਉਟਪੁਟ |
| Preorder | N, L, R | ਟ੍ਰੀ ਦੀ ਨਕਲ/serialize ਕਰਨਾ |
| Postorder | L, R, N | ਟ੍ਰੀ ਨੂੰ ਮਿਟਾਉਣਾ, expr ਦਾ ਮੁਲਾਂਕਣ |
| Level-order | ਡੂੰਘਾਈ ਦੁਆਰਾ | BFS, ਟ੍ਰੀ ਵਿੱਚ ਸਭ ਤੋਂ ਛੋਟਾ ਪਾਥ |
ਹਰੇਕ traversal ਹਰੇਕ ਨੋਡ ਨੂੰ ਇੱਕ ਵਾਰ ਵਿਜ਼ਿਟ ਕਰਦਾ ਹੈ → O(n) ਸਮਾਂ, O(h) ਸਟੈਕ ਸਪੇਸ ਜਿੱਥੇ h ਟ੍ਰੀ ਦੀ ਉਚਾਈ ਹੈ।
ਬਾਈਨਰੀ ਟ੍ਰੀਜ਼ ਕੁਦਰਤੀ ਤੌਰ 'ਤੇ ਸਿੰਗੜੇ ਡਾਟਾ (ਫਾਈਲ ਸਿਸਟਮ, parse trees, ਫੈਸਲੇ ਦੀਆਂ ਟ੍ਰੀਜ਼) ਨੂੰ ਮਾਡਲ ਕਰਦੇ ਹਨ ਅਤੇ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਖੋਜ ਅਤੇ ਛਾਂਟੀ ਢਾਂਚੇ ਦਾ ਅਧਾਰ ਹਨ।
ਚਾਰ traversals ਨੂੰ ਮਾਸਟਰ ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ — ਬਹੁਤੇ ਟ੍ਰੀ ਇੰਟਰਵਿਊ ਸਮੱਸਿਆਵਾਂ ਉਨ੍ਹਾਂ ਵਿੱਚੋਂ ਇੱਕ ਦਾ ਭਿੰਨਤਾ ਹਨ।