1. 程式人生 > >資料結構-樹形結構例項

資料結構-樹形結構例項

題目介紹:

M*N的座標方格(左下點座標(0,0),右上點座標(M,N),自己在圖紙上畫下),輸出從(0,0)點到(M,N)點的所有路徑(規則:只能向右和向上走)

程式原始碼:

// C++程式  二叉樹結構

#include <IOSTREAM>
#include <MALLOC.H>
#include <VECTOR>
using namespace std;


#define M 5
#define N 5


struct nodeData
{
int x;
int y;
};


struct CTreeNode
{
    CTreeNode *lChild;
CTreeNode *rChild;
    nodeData mData;
};
CTreeNode *createTree(CTreeNode *pNode,int x,int y);
void findAllPath(CTreeNode *pRoot, vector<int> xpath,vector<int> ypath);
int main()
{
CTreeNode *rootNode;
rootNode = NULL;
rootNode = createTree(rootNode,0,0);
vector<int> xPath;
vector<int> yPath;
findAllPath(rootNode,xPath,yPath);
system("pause");  
return 0;
}
CTreeNode *createTree(CTreeNode *pNode,int x,int y)
{
if(x==M&&y==N)
{
pNode = NULL;
}
if(x<M||y<N)
{
pNode = (CTreeNode *)malloc(sizeof(CTreeNode));
pNode->lChild = NULL;
pNode->rChild = NULL;
pNode->mData.x = x;
pNode->mData.y = y;
if(x<M)
 pNode->lChild = createTree(pNode->lChild,x+1,y);
if(y<N)
 pNode->rChild = createTree(pNode->rChild,x,y+1);
}
return pNode;
}
void findAllPath(CTreeNode *pRoot, vector<int> xPath, vector<int> yPath)  
{  
    if (pRoot != NULL)  
    {  
        xPath.push_back(pRoot->mData.x);  
yPath.push_back(pRoot->mData.y);

        if (pRoot->lChild == NULL && pRoot->rChild == NULL)  
        { 
vector<int>::iterator iterx=xPath.begin();
vector<int>::iterator itery=yPath.begin();
            for (; iterx!=xPath.end(); iterx++,itery++)  
            {  
                cout<<"("<<*iterx<<","<<*itery<<") ";  
            }  
            cout << endl;
            return;  
        }  
        else  
        {  
            findAllPath(pRoot->lChild, xPath,yPath);  
            findAllPath(pRoot->rChild, xPath,yPath);  
        }  
    }  
}  


擴充套件:

 M*N的座標方格,有對角線,輸出從(0,0)點到(M,N)點的所有路徑(規則:只能向上,向右,向斜右上方向)

程式原始碼

//C++ 三叉樹結構

#include <IOSTREAM>
#include <MALLOC.H>
#include <VECTOR>
using namespace std;


#define M 5
#define N 5


struct nodeData
{
int x;
int y;
};


struct CTreeNode
{
    CTreeNode *lChild;
CTreeNode *mChild;
CTreeNode *rChild;
    nodeData mData;
};
CTreeNode *createTree(CTreeNode *pNode,int x,int y);
void findAllPath(CTreeNode *pRoot, vector<int> xpath,vector<int> ypath);
int main()
{
CTreeNode *rootNode;
rootNode = NULL;
rootNode = createTree(rootNode,0,0);
vector<int> xPath;
vector<int> yPath;
findAllPath(rootNode,xPath,yPath);
system("pause");  
return 0;
}
CTreeNode *createTree(CTreeNode *pNode,int x,int y)
{
if(x==M&&y==N)
{
pNode = NULL;
}
if(x<M||y<N)
{
pNode = (CTreeNode *)malloc(sizeof(CTreeNode));
pNode->lChild = NULL;
pNode->mChild = NULL;
pNode->rChild = NULL;
pNode->mData.x = x;
pNode->mData.y = y;
if(x<M)
 pNode->lChild = createTree(pNode->lChild,x+1,y);
if(x<M&&y<N)
 pNode->mChild = createTree(pNode->mChild,x+1,y+1);
if(y<N)
 pNode->rChild = createTree(pNode->rChild,x,y+1);
}
return pNode;
}
void findAllPath(CTreeNode *pRoot, vector<int> xPath, vector<int> yPath)  
{  
    if (pRoot != NULL)  
    {  
        xPath.push_back(pRoot->mData.x);  
yPath.push_back(pRoot->mData.y);

        if (pRoot->lChild == NULL && pRoot->rChild == NULL && pRoot->mChild == NULL)  
        { 
vector<int>::iterator iterx=xPath.begin();
vector<int>::iterator itery=yPath.begin();
            for (; iterx!=xPath.end(); iterx++,itery++)  
            {  
                cout<<"("<<*iterx<<","<<*itery<<") ";  
            }  
            cout << endl;
            return;  
        }  
        else  
        {  
            findAllPath(pRoot->lChild, xPath,yPath); 
findAllPath(pRoot->mChild, xPath,yPath);
            findAllPath(pRoot->rChild, xPath,yPath);  
        }  
    }  
}  

相關推薦

資料結構-樹形結構例項

題目介紹: M*N的座標方格(左下點座標(0,0),右上點座標(M,N),自己在圖紙上畫下),輸出從(0,0)點到(M,N)點的所有路徑(規則:只能向右和向上走) 程式原始碼: // C++程式  二

資料結構樹形結構

樹的概念  由N(N>=0)個節點組成的集合。對N > 1的樹,有: 有一個特殊的結點,稱為根結點,根節點沒有前驅結點 除根結點外,其餘結點被分成M(M>0)個互不相交的集合T1、T2、 ……、Tm,其中每一個集合Ti(1<= i&

javascript將扁平的資料轉為樹形結構 O(n)級演算法

當我們需要將一個一維陣列轉換成一個多層結構的時候,最簡單但是最慢的就是多個for迴圈巢狀,但是這樣做有一些缺點,那就是效率太低、而且有多少層就需要巢狀幾個for迴圈,不好用。 我實現了用O(n)級演算法將 一個扁平的陣列即一維陣列代表的選單結構轉換成一個多層級的選單結構。 一位陣列中

javascript將扁平的資料轉為樹形結構 O(n)級演算法

當我們需要將一個一維陣列轉換成一個多層結構的時候,最簡單但是最慢的就是多個for迴圈巢狀,但是這樣做有一些缺點,那就是效率太低、而且有多少層就需要巢狀幾個for迴圈,不好用。 我實現了用O(n)級演算法將 一個扁平的陣列即一維陣列代表的選單結構轉換成一個多層級的選單結構。

資料結構--樹形結構

平衡二叉樹 這是個平衡樹,一個節點下只有小於兩個子葉節點。 該樹想要達成有效查詢,勢必需要維持如下一種結構: 樹的子葉節點中,左子樹一定小於等於當前節點,而當前節點的右子樹則一定大於當前節點。只有這樣,才能夠維持全域性有序,才能夠進行查詢。

jQuery:ztree樹結構外掛具體應用(根據資料渲染樹形結構)

var roleStr = '' //點選配置樹形結構彈框事件 tableData.peizhi = function(data){ layer.open({ type: 1, title: '角色管理', content: $('#ztree'),

JSTree通過ajax載入資料樹形結構不顯示的解決辦法

版本:jstree 3.3.5 頁面引入資源:<link rel="stylesheet" href="/plugins/jstree/themes/default/style.min.css" /><script src="/plugins/jstree/

008-數據結構-樹形結構-二叉查找樹-伸展樹

輸入法 代碼 應用 strong tree 概述 width 需要 struct 一、概述   伸展樹(Splay Tree)是特殊的二叉查找樹。   它的特殊是指,它除了本身是棵二叉查找樹之外,它還具備一個特點: 當某個節點被訪問時,伸展樹會通過旋轉使該節點成為樹根。

java遍歷機構和選單樹形結構資料

查詢機構資料結構資料 mapper層介面省略 /** <一句話功能簡述>查詢機構樹形機構返回資料 <功能詳細描述> @author DENG @version [版本號, 2018年11月1日] @see [相關

資料結構 筆記:樹形結構的層次遍歷

如果按層次遍歷通用樹結構中的每一個數據元素? 當前的事實 -樹是非線性的資料結構,樹的結點沒有固定的編號方式 新的需求 -為通用樹機構提供新的方法,快速遍歷每一個結點 設計思路(遊標) -在樹中定義一個遊標(GTreeNode<T>*) -遍歷開始前將遊標指向

使用jquery中ztree,根據傳入的Json資料不能顯示樹形結構

ztree不能顯示樹形結構的原因有多種,這裡我只說我遇到的情況,首先我確認我自己在JSP頁面中能接收到傳入的json資料,其次,我確定我傳入的資料是正確的(太年輕),但是就是一種無法正常的顯示樹形結構,除錯了半天,我開始懷疑我的傳入的json資料還不是有問題,然後我用json校驗工具對我

如何用CMD遞迴檢視Windows中資料結構 也叫做樹形結構

CMD tree /? 就可以查詢用法! 程式碼如下: C:\>tree /? 以圖形顯示驅動器或路徑的資料夾結構。 TREE [drive:][path] [/F] [/A] /F 顯示每個資料夾中檔案的名稱。 /A 使用 ASCII 字元,而不使

PHP處理資料 樹形結構 全部子節點為根節點的一個子陣列

public static function resursive_make_tree($list,$pk='Fid',$pid='parent_id',$child='_child',$root=0) { $tree = []; forea

Oracle樹形結構資料-相關知識總結

Oracle樹形結構資料--基本知識 1.資料組成 2.基本查詢 2.1.查詢某節點及該節點下的所有子孫節點 SELECT   *       FROM QIANCODE.TREE_TABLE_BASIC T   START WITH T.ID='111' CONNECT BY PRIOR  T.ID=T

樹形結構資料儲存方案的選擇和java list轉tree

樹形結構資料儲存方案 Adjacency List:每一條記錄存parent_idPath Enumerations:每一條記錄存整個tree path經過的node列舉Nested Sets:每一條記錄存 nleft 和 nrightClosure Table:維護一個表,所有的tree path作為

3、【資料結構樹形結構之二叉查詢樹

一、樹的介紹 1. 樹的定義     樹是一種資料結構,它是由n(n>=1)個有限節點組成一個具有層次關係的集合。   把它叫做“樹”是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:   (1) 每個節點有零個或多個子節點;

nzTree 樹形結構資料準備

前言     需要從後臺資料中獲取陣列結構的資料經過處理轉換為nzTree的樹形結構資料 本例中裝換為帶虛線的樹形結構,其他的類似。 轉換程式碼 思路: 1、 先通過一個數組將樹的分組類獲取到 2、

List組裝樹形結構資料,子節點去重!

TreeNode實體 public class TreeNode { private String id; private String parentId; private

組裝樹形結構資料功能封裝

前言: 由於上一篇部落格只針對於實體TreeNode組裝樹形結構,但是實際開發中,我們對應資料表會建立很多實體來承載資料,反成不能每一種實體都需要寫個遞迴或者迴圈的方法來組裝資料結構吧?下面我將上一拼

根據原始平行資料, 轉換成樹形結構資料

點選這裡檢視程式碼 源資料 var originData = [ { "id":"7", "createDate":"2018-07-26 17:48:43", "updateDate":"2018-07-28 12:06:17",