如果我有一棵树如下:
A Root Level
/ \
/ \
G Z Level 1
/ \ / \
/ \ / \
C D T J Level 2
我有三个问题:
如何遍历此树,以便首先打印1级节点,然后打印根级别,然后打印2级
G,Z,A,C,D,T,J
如何遍历此树,以便首先打印1级节点,然后打印2级,然后打印根级
G,Z,C,D,T,J,A
如何遍历此树,以便首先打印Level 2节点,然后打印1级,然后打印根级
C,D,T,J,G,Z,A
我正在维基百科上看到树上的几个人,并记得我曾在一次采访中被问过的一个老问题。我认为问题是上述三个问题(很可能是第一个或第二个)。
答案 0 :(得分:0)
预先遍历遍历:在子树之前访问root
void preorder( BTREE__NODE_p_t node )
if ( node != NULL )
visit( node )
preorder( node->left )
preorder( node->right )
顺序遍历:访问子树之间访问root
void inorder( BTREE__NODE_p_t node )
if ( node != NULL )
inorder( node->left )
visit( node )
inorder( node->right )
后序遍历:访问子树后访问root
void postorder( BTREE__NODE_p_t node )
if ( node != NULL )
postorder( node->left )
postorder( node->right )
visit( node )
为了清楚起见,确实希望算法是通用的,例如应用于n级或仅3级,导致差异在逻辑上就像是巨大的。