深度優先演算法之列印二叉樹葉子節點路徑
阿新 • • 發佈:2020-11-19
比如這樣一棵二叉樹,如何列印二叉樹葉子節點路徑呢?
程式碼如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> int result[100] = {0}; int count = 0; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; void printNode() { int i = 0; printf("%d", result[i]);for(i = 1; i < count; i++) { printf("--->%d", result[i]); } printf("\n"); } void dfs(struct TreeNode* node) { if(node == NULL) { return; } result[count++] = node->val; if (node->right == NULL && node->left == NULL) { printNode(); count--; //重點在這裡回退 return; } dfs(node->left); dfs(node->right); count--; //重點在這裡,要回退 } int main() { struct TreeNode Node[5]; Node[0].val = 4; Node[0].left = &Node[1]; Node[0].right = &Node[2]; Node[1].val = 9; Node[1].left = &Node[3]; Node[1].right = &Node[4]; Node[2].val = 0; Node[2].left = NULL; Node[2].right = NULL; Node[3].val = 5; Node[3].left = NULL; Node[3].right = NULL; Node[4].val = 1; Node[4].left = NULL; Node[4].right = NULL; dfs(&Node[0]); return 0; }
結果: