二叉樹是一種常見的數(shù)據(jù)結(jié)構(gòu),其遍歷方式有三種前序遍歷、中序遍歷和后序遍歷。在C語言中,我們可以通過遞歸和非遞歸兩種方式實現(xiàn)二叉樹遍歷。
1.前序遍歷
前序遍歷的順序是先遍歷根節(jié)點,再遍歷左子樹,遍歷右子樹。實現(xiàn)方式如下
void preOrderTraversal(TreeNode root){;
preOrderTraversal(root->left);
preOrderTraversal(root->right);
非遞歸實現(xiàn)
void preOrderTraversal(TreeNode root){;
s.push(root);pty()){ode = s.top();tfode->val);odeode->right);odeode->left);
}
2.中序遍歷
中序遍歷的順序是先遍歷左子樹,再遍歷根節(jié)點,遍歷右子樹。實現(xiàn)方式如下
遞歸實現(xiàn)OrderTraversal(TreeNode root){;OrderTraversal(root->left); OrderTraversal(root->right);
非遞歸實現(xiàn)OrderTraversal(TreeNode root){;pty() || root){
if(root){
s.push(root);
root = root->left;
}else{
root = s.top();
root = root->right;
}
}
3.后序遍歷
后序遍歷的順序是先遍歷左子樹,再遍歷右子樹,遍歷根節(jié)點。實現(xiàn)方式如下
void postOrderTraversal(TreeNode root){;
postOrderTraversal(root->left);
postOrderTraversal(root->right);
非遞歸實現(xiàn)
void postOrderTraversal(TreeNode root){;t>output;
s.push(root);pty()){ode = s.top();ode->val);odeode->left);odeode->right);
}pty()){ output.top());
output.pop();
}
二叉樹的遍歷是一種基礎(chǔ)算法,在C語言中可以通過遞歸和非遞歸兩種方式實現(xiàn)。前序遍歷、中序遍歷和后序遍歷的實現(xiàn)方式均不同,需要根據(jù)具體情況選擇合適的方法。