1. 程式人生 > >求一個二叉樹的映象/在二叉樹中查詢某個元素X

求一個二叉樹的映象/在二叉樹中查詢某個元素X

1.二叉樹映象

    void  _MirrorTree(Node* root)
    {
        //1.空樹,直接返回
        if (root==NULL)
        {
            return ;
        }
        //2.樹只有一個結點,不用求映象,直接返回
        if(root->left==NULL&&root->right==NULL)
        {
            return ;
        }
        //3.樹不為空,且大於一個結點
        swap(root->
left,root->right); _MirrorTree(root->left); _MirrorTree(root->right); } void _fun(Node* root) { if (root==NULL) { return ; } cout<<root->data<<" "; _fun(root->left); _fun(root->right); }

2.查詢

    Node* _Find(Node* root,const T x)//二叉樹中查詢某元素
    {
        //1.如果樹為空,返回空指標
        if (root==NULL)
        {
            return NULL;
        }
        //2.如果找到了該節點,直接返回該節點的指標
        if (root->data==x)
        {
            return root;
        }
        //3.如果當前樹的根結點的值域不是X,則先找左子樹,後找右子樹
        Node*
ret=_Find(root->left,x); //3.1如果ret不為空,代表在左樹中找到了結點,那麼直接返回,不用在右樹中找了 if (ret) { return ret; } else//3.2如果在左樹中沒有找到,那麼就要在右樹中找,在右樹中無論找到與否,都直接返回,找到返回找到的結點,沒找到就返回空; { ret=_Find(root->right,x); return ret; } }

相關推薦

一個映象/在查詢某個元素X

1.二叉樹映象 void _MirrorTree(Node* root) { //1.空樹,直接返回 if (root==NULL)

9.28機試 定義兩個陣列,首先把兩個數組合併成一個新陣列,然後把新陣列的所有元素逆序排列

public class Demo7 { public static void main(String[] args) { int[]array1 = new int[]{10,20,30};

已知一個按先序序列輸入的字元序列,如abc,,de,g,,f,,,(其中逗號表示空節點)。請建立並按序和後序方式遍歷,最後出葉子節點個數和深度。

這是一個標準的模板題 記下了就完事了! Input   輸入一個長度小於50個字元的字串。 Output 輸出共有4行: 第1行輸出中序遍歷序列; 第2行輸出後序遍歷序列; 第3行輸出葉子節點個數; 第4行輸出二叉樹深度。 Sample Input abc,,

阿里14筆試題-一個最大值和最小值的差值絕對值

阿里巴巴面試題: 輸入:一個二叉樹 輸出:二叉樹的最大值和最小值的差值絕對值 單純從演算法功能上來看 1-可以先建立一個大根堆,把最大的元素挑出來; 2-然後在建立小根堆,把最小的元素挑出來; 3-在求最大和最小差值的絕對值; 程式碼: #if 0 /* 最大堆排序 */

一個搜尋第K個最小值

假設該顆二叉搜尋樹的總元素數大於等於K 解題思路:用STL容器的棧來實現 int kthSmallest(TreeNode* root, int k) { std::stack<TreeNode*> Stack; while

C++遞迴映象

1若結點為空則返回 2否則分別求左右子樹映象 3交換左右子樹TreeNode* invertTree(TreeNode* root) { if(root==NULL){ return NULL; } T

LeetCode之映象(簡單

問題描述: 給定一個二叉樹,檢查它是否是映象對稱的。 例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面這個 [1,2,2,null,3,null,3]&n

劍指offer系列——刪除連結串列重複的結點,的下一個結點,對稱的

刪除連結串列中重複的結點 題目描述 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5 解題思路:

第六章作業1—--計算機17級 6-1 高度 (20 分)

6-1 求二叉樹高度 (20 分) 本題要求給定二叉樹的高度。 函式介面定義: int GetHeight( BinTree BT ); 其中BinTree結構定義如下: typedef struct TNode *Position; typedef P

PHP演算法-映象的PHP實現

操作給定的二叉樹,將其變換為源二叉樹的映象。 二叉樹的映象定義:源二叉樹 8 / \ 6 10 / \ / \ 5 7 9 11 映象二叉樹 8

給定一個和其中的一個結點,請找出序遍歷順序的下一個結點並且返回。注意,的結點不僅包含左右子結點,同時包含指向父結點的指標。

題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。 /* 分析二叉樹的下一個節點,一共有以下情況: 1.二叉樹為空,則返回空; 2.節點右孩子存在,則設定一個指標從該節點的右孩子出發,一直沿著指向左

基礎操作 ,前後序遍歷,高度,搜尋排序)Java實現 程式碼集合

首先,定義一個樹類Tree.java public class Tree { public TreeNode root; } 定義樹節點類TreeNode.java public class TreeNode { public TreeNode(int

LeetCode之映象(簡單

問題描述: 給定一個二叉樹,檢查它是否是映象對稱的。 例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面這個 [1,2,2,null,3,null,3] 則不是映象對稱的

判斷一個序列是不是搜尋的後序遍歷序列

#include <iostream> #include <cstring> #include <queue> using namespace std; bool check(int a[],int start,int last) {

7-21 字首表示式的值(

算術表示式有字首表示法、中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2+3*(7-4)+8/4的字首表示式是:+ + 2 * 3 - 7 4 / 8 4。請設計程式計算字

一個,現在懷疑它有一個結點有2個父節點,請寫出一個函式來判斷該是否存在一個節點含有2個父節點。如果存在,返回true,否則返回false。

可以這樣,要檢測一個結點是否有兩個父親時,先把從該結點開始的結點與原樹分離,分成兩部分,然後再從原樹再查詢該結點,如果找到那就是有兩個結點,如果沒有則遞迴查詢。</span> struct Node{ Node *pLeft; Node *pRight; int

--將搜尋轉換成一個排序的雙向連結串列

思路: 二叉搜尋樹本來就是已經排好序的,左比根小右比根大。 所以我們將左子樹的最右的節點與根相連並且將根與右子樹中最左邊的結點相連線。 之後對子樹進行遞迴操作。 void ConvertNode(BinaryTreeNode* pNode,Binar

系列---包含n個節點的查詢的種類數

題目1 求包含n個節點的二叉查詢樹的種類數; 方法1 設dp[i]表示共有i個節點時,能產生的BST樹的個數 n == 0 時,空樹的個數必然為1,因此dp[0] = 1 n == 1 時,只有1這個根節點,數量也為1,因此

根據的先序和序遍歷,出其後序遍歷序列

    新手,摸索著前進.......這次用一個動態分配記憶體的方法,關於記憶體那方面,我也不是很懂,不過能執行也是超級開心的,哈哈由先序序列和中序序列可以唯一確定一棵二叉樹,演算法實現步驟如下:1)根據先序序列確定樹的根結點2)根據根結點在中序序列中的位置劃分出二叉樹的左右