二叉樹的映象

2021-06-27 09:12:58 字數 1662 閱讀 3028

畫圖可以幫助我們理解。

遞迴和迴圈實現(棧)

**和測試**如下:

#include #include #include using namespace std;

struct binarytreenode

;binarytreenode* createbinarytreenode(int value)

void connecttreenodes(binarytreenode* pparent, binarytreenode* pleft, binarytreenode* pright)

}void printtreenode(binarytreenode* pnode)

else

printf("\n");

}void printtree(binarytreenode* proot)

}void destroytree(binarytreenode* proot)

}//遞迴實現

void mirrorrecursively(binarytreenode *pnode)

if (pnode->m_pleft == null && pnode->m_pright==null)

binarytreenode *temp = pnode->m_pleft;

pnode->m_pleft = pnode->m_pright;

pnode->m_pright = temp;

if (pnode->m_pleft)

if (pnode->m_pright) }

//非遞迴實現(借用棧的資料結構)

void mirroriteratively(binarytreenode *proot)

stackstacktreenode;

stacktreenode.push(proot);

while (stacktreenode.size()>0)

if (pnode->m_pright)

}}// ********************測試**********************

// 測試完全二叉樹:除了葉子節點,其他節點都有兩個子節點

// 8

// 6 10

// 5 7 9 11

void test1()

// 測試二叉樹:出葉子結點之外,左右的結點都有且只有乙個左子結點

// 8

// 7

// 6

// 5

// 4

void test2()

// 測試二叉樹:出葉子結點之外,左右的結點都有且只有乙個右子結點

// 8

// 7

// 6

// 5

// 4

void test3()

// 測試空二叉樹:根結點為空指標

void test4()

// 測試只有乙個結點的二叉樹

void test5()

void main()

映象二叉樹

映象二叉樹與二叉樹的區別是左右孩子對於根節點的相對大小剛好相反不用建立映象樹,通過對原樹的映象便歷,即可得到所需的東西。後序 樹 lr根,映象 rl根。如果創立映象二叉樹,insert 改一下即可,這樣可以把preordermirror 等去掉。對於遍歷後的排序放到vector陣列裡便於比較,而且進...

映象二叉樹

題目描述 操作給定的二叉樹,將其變換為源二叉樹的映象。思路 1 獲取源二叉樹的映象,將源二叉樹的左右子樹交換即可 2 主要步驟 若二叉樹為空,直接返回 若二叉樹不為空,交換其左右子樹 遞迴的將二叉樹的其他結點進行交換 public class treenode public class soluti...

二叉樹12 二叉樹的映象

題目 操作給定的二叉樹,將其變換為源二叉樹的映象。輸入描述 思路 首先要理解業務邏輯,何為映象?所謂映象就是對於任何乙個結點,將其左右子樹進行交換即可。對於一棵以root為根結點的二叉樹,要將其映象,首先將其左右子樹 root.left為根的子樹 和 root.right為根的子樹 進行映象,然後將...