日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构--二叉树--路径 假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点, 编写函数 path,计算root到 node 之间的路径,(该路径包括root结

發布時間:2023/12/4 编程问答 38 豆豆



假設二叉樹采用二叉鏈表方式存儲, root指向根結點,node 指向二叉樹中的一個結點,
編寫函數 path,計算root到 node 之間的路徑,(該路徑包括root結點和 node 結點)。path 函數聲明如下:

bool path(BiTNode* root, BiTNode* node, Stack* s);


其中,root指向二叉樹的根結點,node指向二叉樹中的另一結點,s 為已經初始化好的棧,
該棧用來保存函數所計算的路徑,如正確找出路徑,則函數返回 true,此時root在棧底,node在棧頂;
如未找到,則函數返回 false, 二叉樹的相關定義如下:

#include "bitree.h" //請不要刪除,否則檢查不通過 #include <stdio.h> #include <stdlib.h>bool path(BiTNode* root, BiTNode* node, Stack* s) {BiTNode *p, *q; // ElemType p;int i = 0;p = root;q = NULL;init_stack(s);if (p == NULL || node == NULL)return false;if (p == node) {push(s, p);return true;}while (p != NULL || !is_empty(s)) {while (p) {push(s, p);//非空就先壓進去 if (p == node)//node已經壓進去了 return true;p = p->left;//先根遍歷 }top(s, &p); //回到分支的根if (p->right == q || p->right == NULL) {q = p;//第一個判斷條件很關鍵, 判是否已經遍歷過 pop(s, &p);//左子樹前面的while遍歷了, 該結點的右子樹遍歷了或者為空就不要這個節點了 p = NULL; //置空就不會被再次壓入 ,過前面的while循環, 等待下一次top賦值, 層次-1//這里指針斷了 //需要注意的是p雖然指向該節點但是置空, 該結點任然存在, 并且q結點指向避免再次訪問 } else {p = p->right;}}return false; }

?

總結

以上是生活随笔為你收集整理的数据结构--二叉树--路径 假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点, 编写函数 path,计算root到 node 之间的路径,(该路径包括root结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。