拷貝二叉樹

2021-08-21 15:59:45 字數 1172 閱讀 2300

拷貝二叉樹,就是要拷貝根節點,葉子節點,第一步得先分配乙個空間給根節點, bitnode* newnode = (bitnode*)malloc(sizeof(bitnode));將其葉子節點指向null,在判斷原樹的根節點的左節點和右節點是否為空,不為空就得複製過去,利用迭代就很容易做到。最後將新的子節點和根節點鏈結起來。

typedef struct bitnode

bitnode;

bitnode* copytree(bitnode *root)

bitnode* newnode = (bitnode*)malloc(sizeof(bitnode));

bitnode* newlc = null;

bitnode* newrc = null;

newnode->data = root->data;//拷貝根節點

if (root->lchild != null)

else

if (root->rchild != null)

else

newnode->lchild = newlc;

newnode->rchild = newrc;

return newnode;

}void main()

{bitnode t1, t2, t3, t4, t5;

memset(&t1, 0, sizeof(bitnode));

memset(&t2, 0, sizeof(bitnode));

memset(&t3, 0, sizeof(bitnode));

memset(&t4, 0, sizeof(bitnode));

memset(&t5, 0, sizeof(bitnode));

t1.data = 1;

t2.data = 2;

t3.data = 3;

t4.data = 4;

t5.data = 5;

t1.lchild = &t2;

t1.rchild = &t3;

t2.rchild = &t4;

t3.lchild = &t5;

inorder(&t1);

printf("\n");

bitnode *newn=copytree(&t1);

inorder(newn);

system("pause");

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹拷貝刪除法

二叉樹常用的刪除法是 歸併刪除法,他有乙個很大的缺點,可能會導致增加樹的高度。為了解決這個問題,可以採用 拷貝刪除法。刪除用乙個值a1覆蓋另乙個值a2,然後刪除a1包含的節點。a1是要刪除的值a2的前驅 乙個節點的前驅是左子樹的最右節點值,他的直接後繼是右子樹的最左節點值 這樣就解決了樹增高的問題,...