typedef enum{Link, Thread} PointerTag;
//Link==0 表示指向左右孩子指標
//Thread==1 表示指向前驅或后繼的線索
struct TreeNode{
int data;
struct TreeNode *left, *right;
PointerTag LTag, RTag;
};
struct TreeNode *pre; //全域變數
void InThreading(struct TreeNode *p){
if (p){
InThreading(p->left); //遞回左子樹線索化
if (!p->left){
p->LTag = Thread;
p->left = pre;
}
if (pre && !pre->right){
pre->RTag = Thread;
pre->right = p;
}
//我對這個函式的理解應該是沒有問題的,但是我在《大話資料結構》上看到作者把這個函式中的一部分改成下面紅色字體的那樣,沒有加上pre為真這個判定條件,結果搞得我一頭霧水。我想問的是,改下下面紅色字體那樣子的話是對的嗎?為什么?在判定pre->right為假之前是否要先判定pre為真?
/*
if (!pre->right){
pre->RTag = Thread;
pre->right = p;
}
*/
pre = p;
InThreading(p->right); //遞回右子樹線索化
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/181498.html
標籤:C語言
上一篇:結構體定義
