劍指offer 19 二叉樹的映象

2021-08-01 15:20:38 字數 1823 閱讀 7999

二叉樹的映象 :

映象即就是在鏡子中所成的像

**實現:

ps:搜尋二叉樹和普通二叉樹實現方法是相同的,只是兩種建樹過程有所不同,此處實現的是搜尋二叉樹。

1.遞迴實現:

#pragma once

#include #include #include using namespace std;

template struct searchbinarytreenode

};template class searchbinarytree

~searchbinarytree()

{} bool insert(const k& key) //建樹,遞迴實現

node* parent = null;

node* cur = _root;

while (cur)

else if (cur->_key > key)

else

}//此時找到要插入的位置

if (parent->_key > key)

else

}void mirrorimage() //遞迴實現映象

void inorder() //中序遍歷

protected:

void _inorder(node* root)

_inorder(root->_left);

cout << root->_key << " ";

_inorder(root->_right);

} void _mirrorimage(node* cur) //遞迴實現映象

if (cur->_left == null && cur->_right == null)

//只要當前節點有乙個孩子不為空,即可交換

node* temp = cur->_left;

cur->_left = cur->_right;

cur->_right = temp;

if (cur->_left)

if (cur->_right)

}protected:

node* _root; //根節點

2.非遞迴實現,借助棧

void _mirrorimage(node* cur)         //非遞迴實現映象

stackqq;

qq.push(cur);

while (!qq.empty()) //棧不為空時

劍指offer 19 二叉樹的映象

先序遍歷樹的每個結點,若遍歷到的結點有子節點,則交換它的兩個結點。遞迴方式 如果proot為null,則為空樹,返回 如果proot不為null,交換proot左右結點,然後分別求左右子樹的映象 非遞迴方式 步驟描述 借助棧 首先,將根節點proot入棧 第一步 當佇列未空時執行第二步 第二步 出棧...

劍指offer19 二叉樹的深度

題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。解題思路 做深度優先搜尋,找出最大路徑長度 coding utf 8 class treenode def init self,x self.val x self.lef...

面試題 劍指offer19 二叉樹的映象

二叉樹的映象就是要將左子樹調整到右子樹的地方 將右子樹的位置調整到左子樹的位置 首先先序遍歷這個數的每個節點,如果遍歷到節點有子節點 就交換它的兩個子結點,當交換完所有非結點之後,就得到了樹的映象 的實現 includeusing namespace std struct binarytreenod...