Any of the four traversal methods can be used, since each method visits each node exactly one time.
while (there are elements in the tree)
cnt++
if (there is a left child)
push onto a queue
endif
if (there is a right child)
push onto a queue
endif
pop the queue
endwhile
The height of a binary tree can be found by performing a postorder traversal. The height of the left subtree is determined; then the height of the right subtree is determined. During the "visit" step, the height of the tree is determined as:
height = maximum{leftHeight, rightHeight} + 1if(ptr is null) return 0 endif leftHeight = height(ptr->leftChild) rightHeight = height(ptr->rightChild) if (leftHeight > rightHeight) return leftHeight + 1 else return rightHeight + 1 endif
Any of the four traversal methods can be used, since each method visits each node exactly one time.
while (there are elements in the tree)
if (leftChild is null AND rightChild is null)
leaveCnt++
if (there is a left child)
push onto a queue
endif
if (there is a right child)
push onto a queue
endif
pop the queue
endwhile
The width of a binary tree is the maximum number of elements on one level of the tree.
isRowEmpty -- indicates if there is an empty row below the current level
q1, q2 -- queues to hold the address of nodes in the tree
ptr -- pointer to a binary tree node
width -- width of 1 level
maxWidth -- the maximum width
initialize isRowEmpty to false
initialize width and maxWidth to 0
push the address of the first node onto q1
while (isRowEmpty == false)
set isRowEmpty to true
while(q1 is not empty)
ptr = pop q1
if (ptr is not null)
increment width
push address of ptr's leftChild on q2
push address of ptr's rightChild on q2
if (ptr's leftChild is not null OR ptr's rightChild is not null)
isRowEmpty = false
endif
endif
endwhile
while (q2 is not empty)
move items from q2 to q1
endwhile
if (width > maxWidth)
maxWidth = width
endif
set width to 0
endwhile
The delete a binary tree, all of its nodes need to be deleted. This can be done by performing a postorder traversal. During the "visit" step, the node is deleted. By doing this, the left subtree will be deleted, then the right subtree, and finally the root.
delete ()
delete(root)
set root to null
delete(pointer to a tree node)
if (pointer is not null)
delete(pointer leftChild)
delete(pointer rightChild)
delete pointer
endif