確定根節點在中序中的位置,將中序序列分為兩個子串行,遞迴處理直到所處理的子串行只剩下乙個元素
btnode *createbt(char pre,char in,int l1,int r1,int l2,int r2)
實質遍歷二叉樹
int n=0; //先序遍歷
void count(btnode *p)
}//後序遍歷
int count(btnode *p)
else
}
int n=0; //採用前序遍歷
void count(btnode *p)
} //對應後序遍歷
int count(btnode *p)else if(p->lchild==null&&p->rchild==null) return 1;
else
}
遍歷過程中只在遇到葉子結點的時候對其右指標進行操作
void link(btnode *p,btnode *&head,btnode *&tail)
else
} link(p->lchild,head,tail); //先序遍歷
link(p->rchild,head,tail) ;
}}
修改二叉鍊錶結點資料結構,將所有結點的parent指標指向雙親結點,列印所有節點到根節點的路徑。
typedef struct btnodebtnode;
//給parent指標賦值
void tribtree(btnode *p,btnode *q)
}//任給乙個節點求其到根節點的路徑
void printpath(btnode *p)
}
只需將根節點移動到整個序列的末尾,然後繼續遞迴處理序列的前一半和後一半
void change(char pre,int l1,int r1,char post,int l2,int r2)
}
int l=1;
void high_x(btnode *b,int x)
}
void double_order(btnode *t)
}
沿著t的右子樹鏈一直走下去,直到遇到其右指標為右線索的節點為止
tbtnode *inlast(tbtnode *t)
若t有左線索,則其左線索所指結點即為中序前驅;若無左線索,則其左子樹中中序最後乙個節點為它的中序前驅
tbtnode *inprior(tbtnode *t)
分三種情況:1、節點有左孩子 2、節點只有右孩子 3、節點沒有孩子,此時其前序後繼是此節點的右線索走到無右線索節點這個節點就是前序後繼
tbtnode *prenext(tbtnode *t)
return p;
}
二叉樹 滿二叉樹與完全二叉樹
二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...
樹與二叉樹
樹是一類重要的非線性資料結構,是以分支關係定義的層次結構 定義 樹 tree 是n n 0 個結點的有限集t,其中 n 0時為空樹 n 0時,有且僅有乙個特定的結點,稱為樹的根 root 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,稱為根的...
樹與二叉樹
建立 先序二叉樹,中序二叉樹,後序二叉樹。給定兩種遍歷序列 前序中序或後序中序 重塑二叉樹 遍歷 判斷乙個節點是否存在於二叉樹中 二叉樹的遍歷 先序,中序,後序 遞迴 非遞迴 層次遍歷 從上到下或從下到上列印 zigzag遍歷方式層次遍歷 二叉樹性質 二叉樹中葉子節點的個數 二叉樹第k層節點數目 二...