【题目】
用递归和非递归的方式,分别按照二叉树先序、中序和后序打印所有的节点。约定:先序遍历顺序为跟、左、右;中序遍历顺序为左、根、右;后序遍历顺序为左、右、根。
【递归代码实现】
class Node{
public:
int value;
Node *left;
Node *right;
Node(int data) {
value = data;
}
};
(1)先序遍历
void preOrderRecur(Node *head){
if (head == nullptr)
return;
print("%d",head->value);
preOrderRecur(head->left);
preOrderRecur(head->right);
}
(3)中序遍历
void preOrderRecur(Node *head){
if (head == nullptr)
return;
preOrderRecur(head->left);
print("%d",head->value);
preOrderRecur(head->right);
}
(3)后序遍历
void preOrderRecur(Node *head){
if (head == nullptr)
return;
preOrderRecur(head->left);
preOrderRecur(head->right);
print("%d",head->value);
}
【非递归代码实现】
(1)先序遍历
流程:
第一步:申请一个新的栈,记为stack。然后将头节点head压入stack中。
第二步&