免費(fèi)個(gè)人博客注冊企業(yè)seo網(wǎng)站營銷推廣
給你一棵二叉樹的根節(jié)點(diǎn)root 返回其節(jié)點(diǎn)值的后序遍歷
示例 1:
輸入:root = [1,null,2,3]
輸出:[3,2,1]
示例 2:
輸入:root = []
輸出:[]
示例 3:
輸入:root = [1]
輸出:[1]
遞歸
思路與算法
首先我們需要了解什么是二叉樹的后序遍歷:按照訪問左子樹——右子樹——根節(jié)點(diǎn)的方式遍歷這棵樹,而在訪問左子樹或者右子樹的時(shí)候,我們按照同樣的方式遍歷,直到遍歷完整棵樹。因此整個(gè)遍歷過程天然具有遞歸的性質(zhì),我們可以直接用遞歸函數(shù)來模擬這一過程
定義 postorder(root) 表示當(dāng)前遍歷到 root 節(jié)點(diǎn)的答案。按照定義,我們只要遞歸調(diào)用 postorder(root->left) 來遍歷 root 節(jié)點(diǎn)的左子樹,然后遞歸調(diào)用 postorder(root->right) 來遍歷 root 節(jié)點(diǎn)的右子樹,最后將 root 節(jié)點(diǎn)的值加入答案即可,遞歸終止的條件為碰到空節(jié)點(diǎn)
和前序和中序遍歷是一樣的大家可以畫出遞歸展開圖 有勇敢的小伙伴可以把自己畫的后續(xù)遞歸展開圖可以發(fā)在討論區(qū)哦
給大家一個(gè)參考的二叉樹 大家可以思考著畫 也可以對著我前面的前序和中序遍歷的遞歸展開圖畫
詳細(xì)代碼
void postorder(struct TreeNode *root, int *res, int *resSize) {if (root == NULL) {return;}postorder(root->left, res, resSize);postorder(root->right, res, resSize);res[(*resSize)++] = root->val;
}int *postorderTraversal(struct TreeNode *root, int *returnSize) {int *res = malloc(sizeof(int) * 2001);*returnSize = 0;postorder(root, res, returnSize);return res;
}