Ich glaube, dass was du willst, ist etwa das Folgende:
Code:
typedef struct foo{
        TreeRec *root;
} root_buffer ;
typedef struct _tree {
        int v;
        struct _tree *left , *right, *parent;
        root_buffer *root;
        }TreeRec, *Tree;
Dann kannst du jedem Knoten das gleiche "root_buffer" Element als root zuweisen und must den Wurzelknoten nur in diesem Buffer neu setzen.
(Keine Ahnung ob das einen bestimmten Namen hätte, statt Buffer)
Ein beinahe gleicher Weg, wäre, was einigigermassen Sinn machen Würde, dass du zwei Strukturen hast für Tree und TreeNode, dann könnte jeder TreeNode auf den Tree verweisen und der Tree kennt den Root TreeNode, aber z.T. wird das recht mühsam, man muss immer überprüfen, ob dieses oder jenes die RootNode geändert hat.