-
前序遍历:
非空,先访问根节点,然后遍历左子树,再右子树
空,则直接返回
递归实现:
void PreOrderTraverse(BiTree T)
{
if(T==NULL)
return;
printf("%c",T->data);//显示结点数据
PreOrderTraverse(T->lchild);//遍历左子树
PreOrderTraverse(T->rchild);//遍历右子树
}
-
中序遍历:
非空,先访问左子树,然后访问根节点,再右子树
空,则直接返回
//中序遍历
void InorderTraverse(BiTree T)
{
if(T==NULL)
return;
InorderTraverse(T->lchild);//遍历左子树
printf("%c",T->data);//显示结点数据
InorderTraverse(T->rchild);//遍历右子树
}
-
后序遍历
非空,先访问左子树,然后访问右子树,再根节点
空,则直接返回
//后序遍历
void PostOrderTraverse(BiTree T)
{
if(T==NULL)
return;
PostOrderTraverse(T->lchild);//遍历左子树
PostOrderTraverse(T->rchild);//遍历右子树
printf("%c",T->data);//显示结点数据
}
力扣板子题:
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
if(preorderSize == 0 || inorderSize == 0)
return NULL;
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
int index;
root -> val = preorder[0];
for(index = 0;index < inorderSize;index++)
if(inorder[index] == preorder[0])
break;
root -> left = buildTree(preorder + 1,index,inorder,index);
root -> right = buildTree(preorder + index + 1,preorderSize - index - 1,inorder + index + 1,preorderSize - index - 1);
return root;
}